phpmyadmin 在显示多个表中的值后按COUNT对表进行排序

k97glaaz  于 2022-11-09  发布在  PHP
关注(0)|答案(1)|浏览(158)

我的目标是:显示特定的ID在一个表phpbb_topics中作为topic_poster重复的频率,但前提是也满足适当的forum_id条件,然后还显示另一个表phpbb_users中对应的用户名。
我已经成功地提取了一个特定用户ID在phpbb_topics表中作为topic_poster出现的频率,如下所示:

SELECT topic_poster, COUNT(topic_poster)
FROM phpbb_topics WHERE forum_id = 156
GROUP BY topic_poster

感谢StackOverflow上的另一个问题,我现在也知道了如何从另一个表中获取数据,以获得与特定userID对应的用户名,如下所示:

SELECT t.topic_poster, u.user_id, u.username
FROM phpbb_topics t
LEFT JOIN phpbb_users u ON u.user_id = t.topic_poster

我也总算最后把这两者混在一起得到了我想要的东西:

SELECT t.topic_poster, COUNT(t.topic_poster), u.user_id, u.username
FROM phpbb_topics t
LEFT JOIN phpbb_users u ON u.user_id = t.topic_poster WHERE t.forum_id = 156
GROUP BY t.topic_poster

但是,我不知道如何根据计数器正确地按降序或升序排序。phpmyAdmin不允许我只单击列名就按它排序,而且我用GROUP BYORDER BY编写的任何查询都报告错误。
更新:将此放入后:

SELECT t.topic_poster, COUNT(t.topic_poster), u.user_id, u.username
FROM phpbb_topics t
LEFT JOIN phpbb_users u ON u.user_id = t.topic_poster WHERE t.forum_id = 156
ORDER BY COUNT(topic_poster)

结果只显示一行:

topic_poster |COUNT(t.topic_poster) | user_id | username
6 | 254 6 | Opix

如果我使用以下命令,也会发生同样的情况:

SELECT t.topic_poster, COUNT(t.topic_poster), u.user_id, u.username
FROM phpbb_topics t
LEFT JOIN phpbb_users u ON u.user_id = t.topic_poster WHERE t.forum_id = 156
ORDER BY COUNT(t.topic_poster)

如果我使用以下命令,也会发生同样的情况:

SELECT t.topic_poster, COUNT(t.topic_poster), u.user_id, u.username
FROM phpbb_topics t
LEFT JOIN phpbb_users u ON u.user_id = t.topic_poster WHERE t.forum_id = 156
ORDER BY topic_poster

如果我使用这个:SELECT t.topic_poster, COUNT(t.topic_poster), u.user_id, u.username FROM phpbb_topics t LEFT JOIN phpbb_users u ON u.user_id = t.topic_poster WHERE t.forum_id = 156 GROUP BY t.topic_poster我得到了所有的结果,但是我不能按计数器排序。

bpzcxfmw

bpzcxfmw1#

mySQL extends the group by,因此您不必有一个。但是,它假定每列的所有值都相同;因此它可以自由地从每一列中选择要放入的内容。但是,如果值不同,它选择的内容(1个值)并不能代表整个集合,因此当值不同时,必须使用group by。
放异道:如果t.forum_ID = 156仅限于特定的topic_poster、user_Id和username,则不会出现问题。但由于t.forum_ID在这些列中的每一列中表示许多不同的值,因此需要使用group by,否则引擎将“在某种程度上”随机为它们中的每一列选择一个值。引擎假定所有这些值都是相同的。
但是,如果所有未聚合的列都具有相同的值...您可以通过允许引擎仅聚合并为每个列“挑选”一个值来获得性能增益。
根据你的回答,你认为你应该得到多行。所以这告诉我非聚合字段是不同的,所以添加一个分组依据...

SELECT t.topic_poster, COUNT(t.topic_poster), u.user_id, u.username
FROM phpbb_topics t
LEFT JOIN phpbb_users u ON u.user_id = t.topic_poster 
WHERE t.forum_id = 156
GROUP BY t.topic_poster, u.user_id, u.username
ORDER BY COUNT(t.topic_poster)

你可以有领带,所以你可能也想在计数后按海报或用户名订购...

相关问题