2012-05-04 8 views
1

私はLEFT JOINを使って遊んできましたが、これまでのところ、すべてのユーザーの評価をすべて下回るクエリでSUMを得ることができるかどうかは疑問です。以下は、ログインしたユーザーが評価しているかどうかについての情報ですが、他のユーザーからの合計評価も表示したいと考えています。LEFT JOINのすべての行でSUM()?

$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が必要ですか?

答えて

0

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

あなたの場合、最も可能性が高いのはcom.comment_idです。

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. "'" 
0

あなたはそれをこのような何かを行うことができます:これはあなたのcomment_idあたりの全ての評価の合計を与えるのだろうか?

1

はあなたのSQLの端にGROUP BY page_idを使用してみましたが:

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."' 
+0

これはこれまでのところ最も近いようです。私が必要とする機能は、現在のユーザーがコメントを評価しているかどうかを表示し、そのコメントを評価したことのあるすべてのユーザーの合計の評価を表示することです。 'user_id =' "。$ user_id_var。" ''のいずれかを取得または削除するように見えますが、両方を取得することはできません。 – john

+0

編集したクエリをチェック:私は 'group by comment_id、user_id'を追加しました。サブセレクトには、このコメントを評価する各ユーザのコメントの評価があります。全体のクエリは、それらのコメントを評価したすべてのコメントと情報を失います。結果の行を検索して、現在のユーザーが特定のコメントを評価したかどうかを確認することができます。 –

+0

まだ運がありません。クエリにはどこかにあるユーザーIDが必要ではないでしょうか? – john