php - 从左连接中删除重复项?

标签 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 也没有用。

最佳答案

您可以按玩家分组:

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

如果 super 管理员只占所有玩家的一小部分,第一个版本可能会更有效率,因为这会限制加入的规模。

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

相关文章:

PHP输出缓冲到文本文件

python - Django:按多对多模型的日期时间和模型本身的日期时间排序

java - 使用 JDBC 透视非常大的表

php - 如何按第二个表的平均值显示两个表中的数据顺序

php - 在 MySQL 中对 YES/NO 值使用 BIT 或 BOOLEAN 更好吗?

mysql - 在 MySQL 中将多行合并为一行,无需组连接

SQL计算病假天数

php - 如何为链接管理器创建自定义菜单以显示在 Wordpress 的导航下

php - PHP中的上传进度条

php - CodeIgniter 即时更改默认数据库名称