2016-04-06 8 views
0

Jungs Ich möchte zwei Tabellen zusammenführen. Erste Tabelle ist comments und zweite Tabelle ist likes. Likes enthält Vorlieben und Abneigungen col rate (1 = gemocht, 2 = nicht mag)MySQL Anzahl Likes und Abneigungen

Deshalb mag ich, wenn ich alle Kommentare zeige auch ich zwei neue Spalten hinzufügen mag likes und dislikes wo ich zähle, wie viele Vorlieben und Abneigungen haben einen Kommentar . Ich mache das nur für Likes, aber ich weiß nicht, wie man auch für Abneigungen tut.

SO hier ist wie Tisch, wo ich gerne sparen:

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) 

Und hier ist Kommentar Tabelle:

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

Deshalb möchte ich dieses Ergebnis tun

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

Meine Abfrage

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; 

Meine Anfrage zählt nur Likes und diese Arbeit gut, aber wie kann ich zählen und nicht?

Antwort

1

Ich bin nicht sicher, wofür die zusätzlichen Spalten benötigt werden. Normalerweise sollten solche Spalten auch in der GROUP BY enthalten sein.

Eine einfachere Version Ihrer Abfrage gibt nur die Informationen für jeden Kommentar mit bedingter Aggregation:

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

Ah, du mich es gebissen. – sagi

+0

Ja danke für diese Arbeit. Ich werde als 'akzeptieren' markieren warten 7min – Ivan

+0

Es ist möglich, Null-Wert zu ersetzen, wenn Like oder Abneigung nicht existiert? Legen Sie einen Standardwert fest? – Ivan

Verwandte Themen