2017-05-07 78 views
1

我有三個表。從多個表中獲得計數(*)sql

進入

ID title 
1 Entry1 
2 Entry2 
3 Entry3 
4 Entry4 

user_likes

ID user_id entry_id 
1  1   3 
2  3   1 
3  9   4 
4  2   2 

user_bookmarks

ID user_id entry_id 
1  6   3 
2  4   3 
3  2   1 
4  2   2 

我要的是總和每個條目的喜歡和書籤。

結果

entryID likes bookmarks 
    1  1   1 
    2  1   1 
    3  1   2 
    4  1   0 
與喜好和每個條目的書籤的總和

也。

RESULT2

entryID likes+bookmarks 
    1   2 
    2   2 
    3   3 
    4   1 

我設法在單獨的表使用此查詢得到的喜好和書籤結果。我無法將它們放在一張表中。

SELECT entry.id, COUNT(entry.id) AS likes FROM entry 
INNER JOIN user_like ON user_like.entry_id = entry.id GROUP BY entry.id ORDER BY likes DESC 
+2

您應該編輯您的問題,並告訴你嘗試什麼。 –

回答

2

你應該聚集前加盟:

select e.*, coalesce(l.likes, 0) as likes, 
     coalesce(b.bookmarks, 0) as bookmarks, 
     (coalesce(l.likes, 0) + coalesce(b.bookmarks, 0)) as both 
from entries e left join 
    (select entryid, count(*) as likes 
     from likes l 
     group by entryid 
    ) l 
    on l.entryid = e.id left join 
    (select entryid, count(*) as bookmarks 
     from bookmarks 
     group by entryid 
    ) b 
    on b.entryid = e.id;