从左连接中删除重复项?

时间:2014-05-31 00:02:15

标签: php mysql sql

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

我在PHP脚本中有上述查询,该脚本显示来自MySQL数据库的播放器统计信息。一切正常,但是,有些玩家有重复的条目

我无法删除重复的条目,因为它是一个功能而不是错误。

是否可以修改此查询以仅返回每个用户一次?

我已将其与while ( $res->fetch-array() ) {}循环相连接,因此它会多次显示每个用户的条目。

另外,我试过DISTINCT无济于事。

1 个答案:

答案 0 :(得分:1)

您可以按玩家分组:

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表中。

如果superadmins只占所有玩家的一小部分,那么第一个版本可能会更有效率,因为这会限制联接的大小。