2016-04-06 3 views
0

私は2つのテーブルをマージしたい。第1のテーブルはcommentsであり、第2のテーブルはlikesである。好きだから私はすべてのコメントを表示する際にも、私は1件のコメントを持っているどのくらいの好き嫌いカウント二つの新しいcolsのlikesdislikesを追加したいたいMySQLの数が好き嫌い

(1 = 2 =嫌い、気に入っ)同類を含んでおり、rate COL嫌い。私は好きなだけのためにそれを行うが、私は嫌いのためにもやる方法を知らない。 SOここ

は私が同類を保存するテーブルのようなものです:

like_id item_id account_id rate time     host  
------- ------- ---------- ------ ------------------- -------- 
    308  262   1  1 2016-03-18 13:45:16 (NULL) 
    309  263   1  2 2016-03-18 13:45:33 (NULL) 
    310  262   7  2 2016-03-18 14:23:49 (NULL) 
    311  262   8  1 2016-03-18 14:24:11 (NULL) 

そしてここでは、コメントテーブルです:

comment_id item_id content  account_id  time     
-------  ------- ----------  ------------ ------------------- 
    308  262  Test comment  1   2016-03-18 13:45:16 

だから私はこの結果

comment_id item_id content account_id  time Likes Dislike   
-------  ------- --------- ------------ ----- -------- ------ 
1   267  test comm  1     4  2 

私をしたいですクエリ

SELECT c.comment_id, acc.account_id, acc.account_firstname, acc.account_lastname,p.photo_name,p.photo_guid, COUNT(_like.item_id) AS likes 
FROM pb_account_comments AS c 
INNER JOIN pb_accounts AS acc ON acc.account_id = c.account_id 
LEFT JOIN pb_account_photos AS p ON p.photo_id = acc.profile_picture_id 
LEFT JOIN pb_account_likes AS _like ON _like.item_id = c.comment_id 
WHERE c.item_id = '2' GROUP BY c.comment_id 
ORDER BY posted_date ASC LIMIT 0,3; 

私のクエリでは好きなものが数えられますが、この作業はうまくいくのですが、どうやって数えますか?

答えて

1

余分な列が必要なのはわかりません。通常、このような列はGROUP BYにも含まれていなければなりません。あなたはそれを私にビット、

SELECT c.comment_id, 
     COALESCE(SUM(l.rate = 1), 0) AS likes, 
     COALESCE(SUM(l.rate = 2), 0) AS dislikes 
FROM pb_account_comments c INNER JOIN 
    pb_account_likes l 
    ON l.item_id = c.comment_id 
WHERE c.item_id = 2 
GROUP BY c.comment_id 
ORDER BY posted_date ASC 
LIMIT 0, 3; 
+0

ああ:あなたのクエリの

簡単なバージョンは、単に条件付き集約を使用して各コメントの情報を返します。 – sagi

+0

この作品に感謝します。私は '受け入れ'が必要待ちとしてマークします7分 – Ivan

+0

好き嫌いが存在しない場合はnull値を置き換える可能性がありますか?デフォルト値を設定しますか? – Ivan

関連する問題