2017-05-07 113 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;