結合、カウント、合計の使用を伴うMySQLクエリに問題があります。環境はここから入手できます:http ://sqlfiddle.com/#!2/38e813/5
私の目標は、ユーザーのすべてのデータを選択し、ユーザーが持っているコメントと投稿の数を数え、ユーザーが受けたすべての評価を合計することです。例からわかるように、評価のレコードが3つある場合でも、返される最終的な評価数は-4(-3である必要があります)です。group byでの作業が必要になると思いますか?
結合、カウント、合計の使用を伴うMySQLクエリに問題があります。環境はここから入手できます:http ://sqlfiddle.com/#!2/38e813/5
私の目標は、ユーザーのすべてのデータを選択し、ユーザーが持っているコメントと投稿の数を数え、ユーザーが受けたすべての評価を合計することです。例からわかるように、評価のレコードが3つある場合でも、返される最終的な評価数は-4(-3である必要があります)です。group byでの作業が必要になると思いますか?
ここで、派生テーブル(xおよびyとして)を使用した私の答え:
select x.id, x.active, x.ip, x.registered, x.username, x.email, x.role,
x.posts, y.comments, x.rating + y.rating as rating
from
(select u.id, u.active, u.ip, u.registered, u.username, u.email, u.role,
count(p.user_id) as posts, ifnull(sum(pr.rating),0) as rating
from users u
join posts p on p.user_id=u.id
left join posts_ratings pr on pr.post_id=p.id) as x
join
(select u.id, u.active, u.ip, u.registered, u.username, u.email, u.role,
count(c.user_id) as comments, ifnull(sum(cr.rating),0) as rating
from users u
join comments c on c.user_id=u.id
left join comments_ratings cr on cr.comment_id=c.id) as y
on x.username=y.username;
テーブルはx
投稿数と合計評価を取得し、y
テーブルはコメント数と合計評価を取得します。両方のテーブルはユーザー名(または必要に応じてuser_id)で結合され、各テーブルの両方の評価が一緒に追加されます。
すべてのユーザーのデータを取得するには、x
とy
テーブルの両方でusersテーブルの列を明示的にリストする必要があります。select u.id, u.active, u.ip, u.registered, u.username, u.email, u.role, ... COLS here
次に、最も外側のselect(最初の行)で同じことを行います。
select x.id, x.active, x.ip, x.registered, x.username, x.email, x.role, ... COLS here
特定のユーザーを取得するには、WHERE
テーブルx、テーブルy、および最も外側のselectに句を追加します。