我有一个MySQL表,其中包含许多具有重复ID的条目(由于各种原因)所以你可能有类似的东西
ID TIME DATA
1 xx xx
2 xx xx
3 xx xx
1 xx xx
3 xx xx
Run Code Online (Sandbox Code Playgroud)
我可以通过PHP运行什么查询来只选择一次ID?所以我希望我的结果集看起来像
ID TIME DATA
1 xx xx
2 xx xx
3 xx xx
Run Code Online (Sandbox Code Playgroud)
Bil*_*win 11
@ karim79和@Matthew Jones提出的DISTINCT(ID)可以解决这个问题的建议是对DISTINCT在SQL中的工作方式的一种常见误解.它没有帮助,因为DISTINCT 始终适用于整行,而不是单列.括号是无关紧要的,因为他们将在查询SELECT (1)对比SELECT 1.
在这种情况下,@ T Pops给出的答案实际上是有用的,因为MySQL以非标准的方式处理GROUP BY.请参阅我的答案" 选择不在GROUP BY中的列 "作为解释.
另一种解决方案是LEFT OUTER JOIN创造性地使用来查询每行的第一行ID.例如,假设TIME列对于给定的列是唯一的ID,您可以执行以下操作:
SELECT t1.*
FROM MyTable t1 LEFT OUTER JOIN MyTable t2
ON (t1.ID = t2.ID AND t1.TIME > t2.TIME)
WHERE t2.ID IS NULL;
Run Code Online (Sandbox Code Playgroud)
如果t1指向组中最早的行,则t2中没有匹配的行与较早的日期.因此,LEFT OUTER JOIN将找不到匹配项,并保留t2.*为NULL.
这听起来像你在寻找GROUP BY.
您可以使用类似于的查询:
SELECT id, time, data GROUP BY ID
Run Code Online (Sandbox Code Playgroud)
您肯定需要做一些调整才能使该查询与您拥有的结构一起工作,但这是基本的想法.
Tizag对于使用GROUP BYMySQL和PHP 有很好的参考.
| 归档时间: |
|
| 查看次数: |
14462 次 |
| 最近记录: |