在显示来自多个 table 的值后,按 COUNT 对 table 进行排序
Sort the table by COUNT after displaying values from multiple tables
我的目标是:显示特定 ID 在 table、phpbb_topics
中作为 topic_poster
重复的频率,但前提是正确的 forum_id 条件也是遇到,然后也显示来自另一个 table、phpbb_users
.
的相应用户名
我已经成功地提取了一个特定用户 ID 作为 topic_poster 在 table phpbb_topics 中出现的频率的计数,就像这样:
SELECT topic_poster, COUNT(topic_poster)
FROM phpbb_topics WHERE forum_id = 156
GROUP BY topic_poster
感谢 Whosebug 上的另一个问题,我现在也知道如何从另一个 table 获取数据以获取与特定用户 ID 对应的用户名,例如:
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 BY
或 ORDER 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
我得到了所有结果,但我不能按计数器排序。
mySQL extends the group by 所以你不必拥有一个。但是,它假设每列的所有值都相同;因此可以自由地从每一列中选择要放入的内容。但是,如果值不同,它选择的(1 个值)并不代表整个集合,因此当值不同时,您必须使用 group by。
换一种说法:如果 t.forum_ID = 156 限于特定的 topic_poster、user_Id 和用户名。你不会有问题的。但是由于 t.forum_ID 在每一列中代表许多不同的值,因此需要分组依据,否则引擎将“有点”随机 select 每个值的值。引擎假定所有内容都相同。
因此 mySQL Group by extension 的垮台。但是,如果所有 non-aggregrated 列都具有相同的值...您可以通过允许引擎聚合并 'pick' 每列的值来获得性能提升。
根据您的回复,您认为您应该获得多行。所以这告诉我 non-aggregated 字段不同所以添加一个组...
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)
你可能有领带,所以你可能还想在计数后按海报或用户名订购...
我的目标是:显示特定 ID 在 table、phpbb_topics
中作为 topic_poster
重复的频率,但前提是正确的 forum_id 条件也是遇到,然后也显示来自另一个 table、phpbb_users
.
我已经成功地提取了一个特定用户 ID 作为 topic_poster 在 table phpbb_topics 中出现的频率的计数,就像这样:
SELECT topic_poster, COUNT(topic_poster)
FROM phpbb_topics WHERE forum_id = 156
GROUP BY topic_poster
感谢 Whosebug 上的另一个问题,我现在也知道如何从另一个 table 获取数据以获取与特定用户 ID 对应的用户名,例如:
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 BY
或 ORDER 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
我得到了所有结果,但我不能按计数器排序。
mySQL extends the group by 所以你不必拥有一个。但是,它假设每列的所有值都相同;因此可以自由地从每一列中选择要放入的内容。但是,如果值不同,它选择的(1 个值)并不代表整个集合,因此当值不同时,您必须使用 group by。
换一种说法:如果 t.forum_ID = 156 限于特定的 topic_poster、user_Id 和用户名。你不会有问题的。但是由于 t.forum_ID 在每一列中代表许多不同的值,因此需要分组依据,否则引擎将“有点”随机 select 每个值的值。引擎假定所有内容都相同。
因此 mySQL Group by extension 的垮台。但是,如果所有 non-aggregrated 列都具有相同的值...您可以通过允许引擎聚合并 'pick' 每列的值来获得性能提升。
根据您的回复,您认为您应该获得多行。所以这告诉我 non-aggregated 字段不同所以添加一个组...
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)
你可能有领带,所以你可能还想在计数后按海报或用户名订购...