如果问题看起来太基础,我很抱歉.
我已经浏览了整个互联网和StackOverflow以获得完整的解决方案,并没有找到任何我能理解的内容,也无法自己编写,所以不得不在这里问一下.
我有一个MySQL数据库.
它有一个名为"已发布"的表.
它有8列.
我需要输出这个结果:
SELECT DISTINCT link FROM posted WHERE ad='$key' ORDER BY day, month
Run Code Online (Sandbox Code Playgroud)
但我不仅需要"链接"列,还需要此行的其他列.
对于使用此查询返回的每一行,我还需要知道表中的"id","day"和"month"值等.
请告诉我应该阅读什么,或如何制作它.
请保持尽可能简单,因为我不是MySQL的专家.
编辑:我试过这个:
SELECT DISTINCT link,id,day,month FROM posted WHERE ad='$key' ORDER BY day, month
Run Code Online (Sandbox Code Playgroud)
它不起作用.它返回太多行.假设有10行具有相同的链接,但不同的日/月/ ID.这个脚本将返回全部10个,我只想要第一个(对于这个链接).
Dra*_*ord 88
问题来自本能地相信这DISTINCT是一个列的局部预修改器.
因此,你"应该"能够打字
XXbadXX SELECT col1, DISTINCT col2 FROM mytable XXbadXX
让它返回2的唯一值col. 可悲的是,没有. DISTINCT实际上是一个全局的后置修饰符SELECT,也就是说,与SELECT ALL(返回所有答案)相反SELECT DISTINCT(返回所有唯一答案).因此,单个DISTINCT作用于您提供的所有列.
这使得DISTINCT在单个列上使用它变得非常困难,同时获得其他列,而不会执行非常难看的后期翻转.
正确的答案是GROUP BY在您希望获得唯一答案的列上使用a : SELECT col1, col2 FROM mytable GROUP BY col2 将为您提供任意唯一col2行及其col1数据.
我试过这个:
Run Code Online (Sandbox Code Playgroud)SELECT DISTINCT link,id,day,month FROM posted WHERE ad='$key' ORDER BY day, month它不起作用.它返回太多行.假设有10行具有相同的链接,但不同的日/月/ ID.这个脚本将返回全部10个,我只想要第一个(对于这个链接).
你问的是没有意义的.
要么你想要所有的不同值link, id, day, month,要么你需要找到一个标准来选择id, day, month你想要使用哪个值,如果你只想要一个不同的值link.
否则,你所追求类似于MySQL的隐藏的列GROUP BY/ HAVING报表,这是非标准的SQL,并且实际上可以相当混乱.
实际上,GROUP BY link如果为给定link值选择任何行,则可以使用a .
或者,您可以使用子选择来id为每个link值选择最小值的行(如本答案中所述):
SELECT link, id, day, month FROM posted
WHERE (link, id) IN
(SELECT link, MIN(id) FROM posted ad='$key' GROUP BY link)
Run Code Online (Sandbox Code Playgroud)
SELECT Id, Link, Day, Month FROM Posted
WHERE Id IN(
SELECT Min(Id) FROM Posted GROUP BY Link)
Run Code Online (Sandbox Code Playgroud)
SELECT DISTINCT link,id,day,month FROM posted WHERE ad='$key' ORDER BY day, month
Run Code Online (Sandbox Code Playgroud)
或者
SELECT link,id,day,month FROM posted WHERE ad='$key' ORDER BY day, month
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
136681 次 |
| 最近记录: |