昨日、1つのクエリを数時間以上テストしましたが、成功しませんでした。これらは、3つの表のとおりです。SQL 3つのテーブルで結合する
USERS:
#### id: 1 ##### name: Admin ##### Hometown: The Hague
POSTS:
#### id: 1 ##### userid: 1 ##### title: Test I ##### opinion: agree
#### id: 2 ##### userid: 1 ##### title: Nope.. ##### opinion: disagree
REACTIONS:
#### id: 1 ##### userid: 1 ##### opinion: agree
#### id: 2 ##### userid: 1 ##### opinion: disagree
そして、これは私が欲しいものです: 私は、ユーザー(名前、出身地など)の基本的な情報が欲しいと私はお世辞(ポストどのくらいカウントする - 意見は:同意しますどのくらいの肯定的な反応(反応 - 意見:同意)とどのくらいの否定的な反応(反応 - 意見:同意しない)この人が投稿したどのくらいの苦情(ポスト - 意見:同意しない)
これは私が今使用してクエリです:
SELECT
u.name, u.hometown,
SUM(IF(r.opinion="disagree",1,0)) AS agrees
SUM(IF(r.opinion="disagree",1,0)) AS disagrees,
SUM(IF(p.opinion="agree",1,0)) AS compliments,
SUM(IF(p.opinion="disagree",1,0)) AS complaints
FROM
users AS u
LEFT JOIN
reactions AS r
ON
r.userid = u.id
LEFT JOIN
posts AS p
ON
p.userid = u.id
WHERE
u.id = 1
問題は、これが私に正しい情報を与えないということです。 DBには2つの反応しかありませんが、8つの陽性反応のような値を返します。
私はそれがGROUP BY p.id、r.idと関係があると思いますが、私はそれを試みましたが、うまくいかなかったのです...誰かが私を教えてくれましたか?
ありがとうございます!
?サブクエリを使用する必要があります。サブクエリを使用すると、ユーザが投稿を別々に投稿する必要があります。現在、投稿と反応が交差しているため、重複が多く発生します。 – GarethD
同意後にカンマが不足しているようです。 – xQbert
ええ、私は私が使用した実際のコードではなく、私のブラウザにこれを入力していました。 – Diederik