MySQL データベースでユーザーの投票を数える方法を探しています。
テーブルと列:
companion
- companion_id
- news_id
- user_id
news
- news_id
- user_id
user
- user_id
- user_name
vote
- vote_id
- news_id
- user_id
SQL Fiddle Live Demoをチェックしてください
条件:
- すべてのユーザーが複数のニュースを受け取ることができます
- すべてのニュースは複数の投票を持つことができます
- すべてのニュースには複数のコンパニオンを含めることができます(コンパニオンはユーザーです)
- すべてのユーザーが複数のニュースに投票できます (このクエリでは重要ではありません)
目標:
現在、ユーザーが一緒に持っている投票数を把握しようとしています: 彼自身のニュースと、彼がコンパニオンとしてリンクされているものです。ソリューションは、単一のMySQL クエリである必要があります。
User2の例:
- User2には1 つのニュース記事があります。このニュース記事には2票があります。
- User2は1 つの記事のコンパニオンです。このニュース記事には3票があります。
- User2には5票が必要です
アプローチ:
次のクエリの結果は 5 ではなく 31 です。これは、2 つの異なるテーブルに正しくグループ化できないためです。
SELECT u.user_name,
u.user_id,
COUNT(v.vote_id) AS votes
FROM user u,
news n,
companion c,
vote v
WHERE u.user_id = 2 AND
(
(
u.user_id = n.user_id AND
n.news_id = v.news_id
) OR
(
u.user_id = c.user_id AND
c.news_id = v.news_id
)
)
GROUP BY u.user_id
LIMIT 1