假设我有两个表,用户和帖子。帖子有以下字段,userid,postid等,userid可以多次出现,因为一个用户可以写多个帖子....我只是根据posts表中每个userid的出现次数排序用户表。我可以使用此
获取每个用户的出现次数 SELECT userid, COUNT(*)
FROM posts
GROUP BY userid;
我想使用COUNT(*)列下的值,也许可以将它添加到我的其他表中,因为那时我可以简单地使用这样的
SELECT * FROM users
ORDER BY newcolumn ASC;
但我在做这件事时遇到了麻烦。或者我可以在不添加额外列的情况下执行此操作吗?请提示。谢谢
答案 0 :(得分:4)
Left join
是关键所在!
SELECT users.userid,count(posts.userid) AS total_count
FROM users
LEFT JOIN posts on posts.userid = users.userid
GROUP BY users.userid
ORDER BY total_count DESC;
我们将left join
放在具有相同user_id
的两个表格上,我们使用group by
计算每位用户的帖子总数。最后sort
按计数显示结果。
答案 1 :(得分:2)
尝试left join:
operator[]
答案 2 :(得分:1)
您想要选择用户(COUNT(*) FROM posts
),但您希望根据另一个表格(JOIN
)中的条件进行排序 - 因此您需要使用SELECT users.* FROM users
JOIN (
SELECT userid, COUNT(*) as count
FROM posts
GROUP BY userid
) as subquery ON users.id = subquery.userid
ORDER BY subquery.count
副手我似乎无法回想起#34; JOIN"或" RIGHT JOIN"或者"完全加入"如果您想获得表格的笛卡尔积,然后在单个字段上进行分组和聚合,那么您就需要这些,但我可以避免需要记住子查询(希望有人会很快发布更小更聪明的答案):
JOIN
注意:我还没有对此查询进行过测试,但它看起来不错。再说一遍:希望有人会尽快发布更好的答案,因为我没有尽职尽责,但你肯定需要一个# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wp/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wp/index.php [L]
</IfModule>
# END WordPress
:)
答案 3 :(得分:1)
您可以将post_count列添加到users表中,但每次用户创建新帖子时您还必须更新该计数列,并且必须将该逻辑构建到您的应用程序中。
否则,看起来FallAndLearn的答案会为您提供所需的信息。