This question already has an answer here:
SQL max() with inner joins
(1个答案)
5年前关闭。
SELECT player.*, player_iplog.*
FROM player
LEFT JOIN player_iplog ON player.SteamID=player_iplog.SteamID
WHERE player.Rank = 'superadmin'

我在一个PHP脚本中有上述查询,该脚本显示来自MySQL数据库的播放器统计信息。一切正常,但是有些玩家有重复的条目
我不能删除重复的条目,因为这是一个特性,而不是一个bug。
是否可以修改此查询以仅返回每个用户一次?
我把这个连接到了一个while ( $res->fetch-array() ) {}循环,因此它多次显示每个用户的条目。
而且,我也尝试过DISTINCT但没有成功。

最佳答案

您可以按玩家分组:

SELECT player.*, player_iplog.*
FROM player
LEFT JOIN player_iplog ON player.SteamID=player_iplog.SteamID
WHERE player.Rank = 'superadmin'
GROUP BY player.SteamID

或者可以使用子查询:
SELECT player.*, player_iplog.*
FROM player
LEFT JOIN (SELECT *
           FROM player_iplog
           GROUP BY SteamID) AS player_iplog
ON player.SteamID = player_iplog.SteamID
WHERE player.Rank = 'superadmin'

这假设重复项只在player_iplog表中,而不是player表中。
如果超级管理员只是所有玩家中的一小部分,那么第一个版本的效率可能会更高,因为这将限制连接的大小。

关于php - 从左联接中删除重复项? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23965041/

10-11 01:35
查看更多