2016-06-10 22 views
1

Ich habe diese Tabellen:Mysql select sum() aus einer anderen Tabelle

Tabelle: Artikel

id | title | display | 
----------------------------------- 
    1 | Fkekc |  1  | 
    2 | ldsdf |  1  | 
    3 | OTRld |  0  | 
    4 | QCRSA |  1  | 

Tabelle: Likes

id | article_id | like | type 
---------------------------------------- 
    1 |  1  | 121 | 1 
    2 |  1  | 652 | 2 
    3 |  2  | 12  | 1 
    4 |  1  | 5  | 3 

ich dieses Ergebnis erhalten möchten:

Article [1] => 778 
Article [2] => 12 
Article [3] => 0 
Article [4] => 0 

Ich verwende LEFT JOIN zwischen zwei Tabellen, aber diese gibt Datensätze pro likes Tabelle zurück. so erhalte ich drei Rekord von Artikel 1

Mein Code:

SELECT articles.*,likes.like FROM `articles` LEFT JOIN `likes` ON articles.id=likes.article_id WHERE display='1' 

Ich weiß, dass ich SUM() verwenden müssen, aber ich weiß nicht, wie es verwendet

Mit Ihren Antworten finde ich, dass ich muß Verwenden Sie dies:

SELECT articles.*, sum(likes.like) as likesSum FROM `articles` LEFT JOIN `likes`ON articles.id=likes.article_id WHERE display='1' GROUP BY articles.id 

Aber ich möchte Filter in Abfrage setzen. so verwenden:

SELECT articles.*, sum(likes.like) as likesSum FROM `articles` LEFT JOIN `likes`ON articles.id=likes.article_id WHERE display='1' && likesSum>='100' GROUP BY articles.id 

Aber vor Code zurück kein Ergebnis

+0

ersetzen likes.like mit sum (likes.like) als total_like –

+0

@BikashP ich benutze es aber mein Code Rückkehr nur einen Datensatz 'article1' die Gesamt mag' haben 790' –

+0

Gruppe von article_id ? – Dave

Antwort

2

Dies ist Ihre Abfrage

SELECT articles.*,COALESCE(sum(likes.like),0) as total_like FROM 
`articles` LEFT JOIN `likes` ON articles.id=likes.article_id group by 
articles.id 

Ausgang ist enter image description here

+0

dieser Code funktioniert perfekt. aber ich möchte Filter in meiner Abfrage verwenden. also benutze ich diese SELECT Artikel. *, COALESCE (sum (likes.like), 0) als total_like FROM Artikel' LINKS JOIN likesON articles.id = likes.article_id WHERE display = '1' && total_like> = '100' GROUP BY Artikel.id' ....aber das ist kein Ergebnis –

+0

Nicht && total wie schreiben mit total_like –

+0

wo display = '1' mit total_like> 100 –

1
SELECT articles.*, sum(likes.like) as likesSum FROM `articles` LEFT JOIN `likes`ON articles.id=likes.article_id WHERE display='1' GROUP BY articles.id 
+0

'likes.sum' ist wahr? –

+0

Ein Fehler gemacht. Korrigiert es. – Diamond

+0

dieser Code funktioniert perfekt. aber ich möchte Filter in meiner Abfrage verwenden. also benutze ich 'SELECT articles. *, sum (likes.like) wie likesSum FROM' articles' LINKS JOIN 'likes'ON articles.id = likes.article_id WHERE display = '1' && likesSum> = '100' GROUP BY articles.id' .... aber das ist kein Ergebnis –

0

Sie haben alles richtig gemacht, aber nur eine dieser fehlt. Sie haben Gruppe Diese visuelle Darstellung von

SELECT articles.*, likes.like 
FROM `articles` 
LEFT JOIN `likes` ON articles.id = likes.article_id 
WHERE display = '1' 
GROUP BY likes.article_id 
1

Dies sollte für Sie perfekt arbeiten ..

SELECT articles.id, sum(likes.like) from articles left join likes on (articles.id=likes.article_id) group by articles.id order by articles.id 

Siehe die Verwendung von SUM() mit GROUP BY

Verwandte Themen