繁体   English   中英

MYSQL:用联合三表选择计数

[英]MYSQL : select count with union three table

我有关于帖子的三个表格内容信息

每个表都有Post_id,这是Post表的foreign_key

first table = `likes`  
second table = `Comment`  
and last one = `Visitor` 

每个表都有一些有关用户的信息,例如会话或ID等

我需要创建一个新的视图表,其中包含帖子ID和访客数,喜欢,评论

我尝试了这个

SELECT *


  from (

 select id   , count(id) as Comment  
from Post left join Comment  on  id = Post_id 
group by id

  UNION

select id, count(id) as Visitor    
from Post left join Visitor  on id = Post_id 
group by id
UNION

select id, count(id) as Likes  
from Post left join Likes  on id = Post_id 
group by id

) CountsTable
GROUP BY CountsTable.id

但它没有用。 我不知道为什么结果只是第一个内部选择

在我的示例中,结果是

|    id  | Comment| 
|--------|------- | 
|    1   |   55   |    
|    2   |   25   |   
|    3   |   12   |   

我期望这样的事情

| id | Comment | Likes | Visitor |
|--------------|-------|---------|
|  1 |   55    |  100  |   2000  |    

无需使用UNION 计算所有三个表中每个帖子的记录,并用Post表计算左联接结果

试试这个

SELECT id,
        comments,
        vistors,
        likes
FROM   Post p
        LEFT JOIN (SELECT Count(Post_id) comments, Post_id
                    FROM   Comment
                    GROUP  BY Post_id) c
                ON p.id = c.Post_id
        LEFT JOIN (SELECT Count(Post_id) vistors, Post_id
                    FROM   Visitor
                    GROUP  BY Post_id) v
                ON p.id = v.Post_id
        LEFT JOIN (SELECT Count(Post_id) likes, Post_id
                    FROM   Likes
                    GROUP  BY Post_id) l
                ON p.id = l.Post_id 

您可以使用“ Left Join查询来做到这一点,例如:

select u.id, count(distinct l.id) as likes, count(distinct c.id) as comments
from user u left join likes l on u.id = l.user_id
left join comments c on u.id = c.user_id
group by u.id;

这是SQL Fiddle

SELECT id, SUM(Comment),SUM(Visitor),SUM(Likes) from (

select id   , count(id) as Comment, 0 as Visitor, 0 as Likes  
from Post left join Comment  on  id = Post_id 
group by id

UNION ALL

select id, 0 as Comment, count(id) as Visitor , 0 as Likes    
from Post left join Visitor  on id = Post_id 
group by id

UNION ALL

select id, 0 as Comment, 0 as Visitor, count(id) as Likes  
from Post left join Likes  on id = Post_id 
group by id

) CountsTable
GROUP BY CountsTable.id

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM