0

我有 2 张桌子:

users

id | name
-----------
 1 | user 1
 2 | user 2
 3 | user 3

posts

id | userId | text
--------------------
 1 |      1 | text 1
 2 |      1 | text 2
 3 |      2 | text 3
 4 |      2 | text 4
 5 |      2 | text 5
 6 |      2 | text 6

我需要users按后频检索排序,例如:

id | name   | posts
-------------------
 2 | user 2 |     4
 1 | user 1 |     1
 3 | user 3 |     0

有些用户可能没有帖子!

目前我有 2 个查询,分 3 步完成:

  1. 检索所有用户
  2. 检索按分组的所有帖子userId
  3. 用于php加入以上

问题

以上是否可以在单个 sql 查询中完成?

4

2 回答 2

3
select u.id, u.name, count(p.id) as posts
from users u
left join posts p on p.userid = u.id
group by u.id, u.name
order by posts desc
于 2013-09-10T15:35:54.950 回答
1

另一个版本,它阻止users在 group by 子句中列出表中的所有字段。在许多情况下,IMO 也更快。

select u.id, u.name, coalesce(c.cnt, 0) as posts
from users u
left join 
  (select userId, couint(*) cnt from posts group by userId) c
on u.id = c.userId
于 2013-09-10T15:43:40.713 回答