【发布时间】: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'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'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
底部结果显示了我的测试行,但显示了该女性的多个帖子。第一个结果只显示了她的一个,但没有显示我的……有什么想法吗?谢谢!!
【问题讨论】:
-
请显示示例数据。
-
ratemynudepicsLOL -
哈哈有史以来最好的表命名;-)
-
对不起... :) 用示例数据更新了我的帖子
-
刚刚意识到上面的第一个结果集,它只显示她的一个帖子(这很好),删除了最近的结果,而是显示她的旧结果......