1

3つのテーブルがあるとしましょう。それらはユーザー、スレッド、投稿と呼ばれます。ユーザーが 1 つの SQL 行で作成した投稿とスレッドの数を知る必要があります。これを行う最善の方法は何ですか?私が次のようなことをする結合は、これを行うための正しい/最良の方法ですか? しかし、どうやって数えるの?

SELECT *,
FROM users
LEFT JOIN threads on threads.user_id=users.user_id
LEFT JOIN posts on posts.user_id=users.user_id
WHERE user_id='1'
4

5 に答える 5

3

次のような集計関数を適用して合計数を取得できます。

SELECT u.user_id, 
    coalesce(TotalThreads, 0) + coalesce(TotalPosts, 0) Total
FROM users u
LEFT JOIN
(
  select user_id, count(thread_id) TotalThreads
  from threads
  group by user_id
) t
  on t.user_id=u.user_id
LEFT JOIN
(
  select user_id, count(post_id) TotalPosts
  from posts
  group by user_id
) p
  on p.user_id=u.user_id
WHERE u.user_id='1'

値を分離したい場合は、次のようにします。

SELECT u.user_id, 
   coalesce(TotalThreads, 0) TotalThreads, 
   coalesce(TotalPosts, 0) TotalPosts
FROM users u
LEFT JOIN
(
  select user_id, count(thread_id) TotalThreads
  from threads
  group by user_id
) t
  on t.user_id=u.user_id
LEFT JOIN
(
  select user_id, count(post_id) TotalPosts
  from posts
  group by user_id
) p
  on p.user_id=u.user_id
WHERE u.user_id='1'
于 2013-01-11T10:19:21.297 に答える
0

あなたは基本的にそこにいます。count集計関数であるため、 user_id:でグループ化するだけです。

select users.user_id as [User ID]
,count(threads.user_id) as [Number of Threads]
,count(posts.user_id) as [Number of Posts]
from users
left join threads on threads.user_id = users.user_id
left join posts on posts.user_id = users.user_id
where user_id = '1'
group by users.user_id

このようにして、where句はオプションになります。対応するスレッド/投稿数を持つすべてのユーザーの個別のリストが必要な場合は、これを削除できます。

于 2013-01-11T10:22:29.897 に答える
0

まず、 の後にコンマがありますSELECT *。第 2 に、スレッドと投稿が必要な場合、なぜユーザー テーブルにクエリを実行するのでしょうか。第三に、なぜ (ですか?)user_idchar?

SELECT COUNT(user_id) FROM threads WHERE user_id='1'
SELECT COUNT(user_id) FROM posts WHERE user_id='1'

1 つのクエリで使用するUNION場合に使用します。

于 2013-01-11T10:18:17.240 に答える
-1

これは機能しますか?

SELECT COUNT (*) FROM users u, thread t, posts p WHERE t.user_id=u.user_id AND p.user_id=u.user_id AND user_id='1'

私はSQLに熱中していません...

于 2013-01-11T10:19:38.167 に答える
-1
    SELECT 
    COUNT() as posts,
    FROM users
    LEFT JOIN threads on threads.user_id=users.user_id
    LEFT JOIN posts on posts.user_id=users.user_id
    WHERE user_id='1'
于 2013-01-11T10:18:26.753 に答える