2

私は LEFT JOIN で遊んでいますが、以下のクエリですべてのユーザーからこれまでのすべての評価の合計を取得できるかどうか疑問に思っています。以下は、ログインしたユーザーが評価したかどうかに関する情報を取得しますが、他のユーザーからの合計評価も表示したいと思います。

$query = mysql_query("
SELECT com.comment, com.comment_id, r.rate_up, r.rate_down
FROM comments com
LEFT JOIN ratings r
ON com.comment_id = r.comment_id
AND r.user_id = '" . $user_id_var . "'
WHERE page_id = '" . $category_id_var. "'");

次のことを試しましたが、何らかの理由でコメント/行が1つしか返されません。

$query = mysql_query("
SELECT com.comment, com.comment_id,
r.rate_up, r.rate_down 
SUM(r.rate_up) AS total_up_ratings, 
SUM(r.rate_down) AS total_down_ratings,
FROM comments com
LEFT JOIN ratings r
ON com.comment_id = r.comment_id
AND r.user_id = '" . $user_id_var . "'
WHERE page_id = '" . $category_id_var. "'");

どんな助けでも感謝します。別の種類の JOIN が必要ですか?

4

4 に答える 4

1

GROUP BY page_idSQL の最後で使用してみましたか?

于 2012-05-04T11:36:48.457 に答える
0

SQL で集計関数 ( などSUM()) を使用する場合は、対応するGROUP BY句が必要になります。

あなたの場合、最も可能性が高いのはcom.comment_id; これにより、 ごとのすべての評価の合計が得られますcomment_id

于 2012-05-04T11:35:28.623 に答える
0

目的のためにコメント行を複製しているかどうかはわかりませんが、そうでない場合は、次のように評価の副選択を記述してみてください。

select comment_id, user_id, sum(rate_up) as sum_rate_up, 
sum(rate_down) as sum_rate_down from ratings 
group_by comment_id, user_id;

それを結合クエリに含めます。

select com.comment, com.comment_id, r.user_id, r.sum_rate_up, 
r.sum_rate_down from comments com 
left join (select comment_id, user_id, sum(rate_up) as sum_rate_up, 
sum(rate_down) as sum_rate_down from ratings 
group_by comment_id, user_id) as r 
on com.comment_id = r.comment_id where page_id = '".$category_id_var."'
于 2012-05-04T11:40:08.433 に答える
0

次のようにできます。

SELECT 
    com.comment, 
    com.comment_id,
    Total.total_down_ratings,
    Total.total_up_ratings
FROM comments com
LEFT JOIN 
(
SELECT
    SUM(r.rate_up) AS total_up_ratings, 
    SUM(r.rate_down) AS total_down_ratings,
    r.comment_id
FROM
    ratings r
GROUP BY
    r.comment_id
) AS Total
ON com.comment_id = Total.comment_id
AND r.user_id = '" . $user_id_var . "'
WHERE page_id = '" . $category_id_var. "'"
于 2012-05-04T11:35:43.410 に答える