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

1

usersgroup 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 に答える