【问题标题】:Having a hard time with mysql's GROUP BY or DISTINCT使用 mysql 的 GROUP BY 或 DISTINCT 时遇到困难
【发布时间】:2017-10-22 23:38:49
【问题描述】:

我尝试搜索和搜索我的问题的答案,但没有成功找到答案,所以我希望你们中的一位更有经验的专家可以帮助我解决我遇到的这个 MySQL 问题。

在我的一个网站上,我基本上允许人们在他们的个人资料上发帖。然后在我的网站一侧,我列出了由收件人撰写的最后 8 个个人资料帖子(换句话说,他们在自己的个人资料上发布)并且不显示在其他人完成的侧面帖子中。我称这些为“更新”

最近我注意到一位女士在她的个人资料上发布了两次帖子,并且在网站一侧显示了她的两个帖子。我只想显示每个人的一个帖子,并且只有最后 8 个“更新”...

我所做的一开始似乎可行,是在我的查询中使用 GROUP BY,如您在此处看到的:

SELECT `ratemynudepics`.* FROM `ratemynudepics` WHERE `user_id` = `author` AND `body` <> '' GROUP BY `author` ORDER BY `id` DESC LIMIT 8

她旁边的多个帖子只剩下一个帖子,我认为它已经修复,直到我尝试在我自己的个人资料上发布我自己的测试“更新”。它根本没有出现在侧面。

我尝试使用 DISTINCT 而不是 GROUP BY,如下所示:

SELECT DISTINCT `user_id`, `author`, `id`, `body`, `date` FROM ratemynudepics WHERE `user_id` = `author` AND `body` <> '' ORDER BY `id` DESC LIMIT 8

这一变化使我的帖子确实出现在了一边,但这位女士的两个更新又回到了我的下面。

我尝试了各种变体并同时使用了 DISTINCT 和 GROUP BY,无论我尝试什么都无法正确显示我的顶部,(应该是这种情况,因为我的记录是数据库)只有一个女人的清单。我检查了很多次以确保她没有使用不同的 user_id 发布,并且在 phpmyadmin 中测试查询确实为她显示了两个列表,两者都具有相同的 user_id 和作者。我不确定为什么 DISTINCT 允许使用上述查询具有相同 user_id 的多行。

我尝试了以下查询:

SELECT DISTINCT `user_id`, `id`, `author`, `date`, `body` FROM ratemynudepics WHERE `user_id` = `author` AND `body` <> '' GROUP BY `author` ORDER by `id` DESC LIMIT 8

它只显示她一次,但没有在这 8 个结果中的任何一个中显示我,即使我的行再次是插入数据库的最后一个。

有人可以帮我理解我在这里做错了什么,以便我可以正确显示每个用户最多 1 行,但不会放弃我最新的数据库结果,这应该是第一个结果?非常感激!!和平

编辑 - 这是一些与查询匹配的示例结果数据 请注意,第二个结果集显示了我的“测试”更新,但显示了两次用户的帖子,她确实两次发布了相同的文本,相隔大约一个月。

SELECT DISTINCT `id`, `user_id`, `author`, `body`, `date` FROM ratemynudepics WHERE `user_id` = `author` AND `body` <> '' GROUP BY `author` ORDER BY `id` DESC LIMIT 8

AND 

SELECT `ratemynudepics`.* FROM ratemynudepics WHERE `user_id` = `author` AND `body` <> '' GROUP BY `author` ORDER BY `id` DESC LIMIT 8
Both above queries produce the following  

id   user_id   author   body                          date
122  4391      4391     Email me at [blocked]         1497299836
83   4270      4270     I&#039;m back..lol..ho        1474258804
79   4303      4303     Send me a message if y        1473959358
76   4362      4362     This place is a morgue.       1472580597  
68   4358      4358     Smile, have a nice day        1470897755
57   4344      4344     Can someone rate my bo        1467946896
55   4338      4388     hey lets chat                 1466792249
50   4319      4319     hi whats up                   1465604578

SELECT DISTINCT `id`, `user_id`, `author`, `body`, `date` FROM `ratemynudepics` WHERE `user_id` = `author` AND `body` <> '' ORDER BY `id` DESC LIMIT 8 

produces the following results

id   user_id   author   body                          date
153  1         1        test                          1510212341
135  4391      4391     Email me at [blocked]         1508374921
122  4391      4391     Email me at [blocked]         1497299836
83   4270      4270     I&#039;m back..lol..ho        1474258804
79   4303      4303     Send me a message if y        1473959358
76   4362      4362     This place is a morgue.       1472580597  
68   4358      4358     Smile, have a nice day        1470897755
57   4344      4344     Can someone rate my bo        1467946896

底部结果显示了我的测试行,但显示了该女性的多个帖子。第一个结果只显示了她的一个,但没有显示我的……有什么想法吗?谢谢!!

【问题讨论】:

  • 请显示示例数据。
  • ratemynudepics LOL
  • 哈哈有史以来最好的表命名;-)
  • 对不起... :) 用示例数据更新了我的帖子
  • 刚刚意识到上面的第一个结果集,它只显示她的一个帖子(这很好),删除了最近的结果,而是显示她的旧结果......

标签: mysql group-by distinct


【解决方案1】:

感谢本网站上的另一篇文章,如果我使用以下查询,我找到了问题的答案:

SELECT `id`, `user_id`, `author`, `body`, `date` 
FROM ratemynudepics 
WHERE id IN ( SELECT MAX(id) 
              FROM ratemynudepics 
              WHERE `user_id` = `author` AND `body` <> '' 
              GROUP BY user_id ) 
ORDER BY `id` DESC LIMIT 8

生产

    id   user_id   author   body                          date
    153  1         1        test                          1510212341
    135  4391      4391     Email me at [blocked]         1508374921
    83   4270      4270     I&#039;m back..lol..ho        1474258804
    79   4303      4303     Send me a message if y        1473959358
    76   4362      4362     This place is a morgue.       1472580597  
    68   4358      4358     Smile, have a nice day        1470897755
    57   4344      4344     Can someone rate my bo        1467946896
    55   4338      4338     hey lets chat                 1466792249

仍然感谢大家的帮助。万圣节快乐! :D

这是帮助我回答问题的帖子How can I SELECT rows with MAX(Column value), DISTINCT by another column in SQL?

【讨论】:

  • 我认为你可以“接受”你自己的答案。这表明您不再需要帮助,希望提供解决方案的人无需提出您的问题。还有一些想要解决同样问题的可怜的草皮会知道它已经解决了,所以他们会打开问题来找到答案。最后,源解决方案的 url 将是一个很好的包含。 stackoverflow.com/help/someone-answers
  • "Click the Tick" 将此问题标记为已解决。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-20
  • 2014-01-12
相关资源
最近更新 更多