非常にうまく機能するクエリがあります。それから始めましょう:
編集: SQLが更新されました。私0
はすべての列に入ります。
SELECT i.item, i.user_id, u.username,
(COALESCE(r.ratetotal, 0)) AS total,
(COALESCE(c.commtotal, 0)) AS comments,
(COALESCE(r.rateav, '50%')) AS rate,
(COALESCE(x.wasRated, '0')) AS wasRated
FROM items AS i
LEFT JOIN master_cat AS c
ON (c.cat_id = i.cat_id)
LEFT JOIN users AS u
ON u.user_id = i.user_id
LEFT JOIN
(SELECT item_id,
COUNT(item_id) AS ratetotal,
AVG(rating) AS rateav
FROM ratings GROUP BY item_id) AS r
ON r.item_id = i.item_id
LEFT JOIN
(SELECT item_id,
COUNT(item_id) AS commtotal
FROM reviews GROUP BY item_id) AS c
ON c.item_id = i.item_id
LEFT JOIN
(SELECT xu.user_id, ra.item_id, '1' AS wasRated
FROM users AS xu
LEFT JOIN ratings AS ra
ON ra.user_id = xu.user_id
WHERE xu.user_id = '1') AS x
ON x.user_id = u.user_id
AND x.item_id = r.item_id
WHERE c.category = 'Movies'
ORDER by i.item ASC;
もう1つ関数を追加する必要があります。AS x
基本的に、ここには重要な3つのテーブルがあります。 items
、reviews
およびratings
。上部には、各アイテムの平均や合計などの統計を取得しているサブクエリがあります。
user_id
、、item_id
およびrate_id
(in )に関連付けられた最終クエリが必要ratings
です。最終結果では、各アイテムとそれを含む統計が一覧表示されます。ログインしたユーザーが評価した場合は、単純なtrueまたはfalseの列がもう1つ必要です。だから私はこのようなものが必要です:
SELECT ???
FROM ratings AS r
WHERE r.user_id = '{$user_id}'
(user_id
ログインしたユーザーのはPHPから渡されます。`)
情報の最後のビットを取得し、それを親クエリのアイテムの各行に配置するサブクエリを作成するにはどうすればよいですか?