2017-07-14 53 views
0

我有4个表:我怎样才能加入这些表来得到这个数字?

users 
id int primary key 

questions 
id int primary key 
user_id int references users(id) 

answers 
id int primary key 
question_id references questions(id) 
user_id references users(id) 

likes 
id int primary key 
answer_id references answers(id) 
question_id references questions(id) 
check answer_id xor question_id 

一个像可以参考答案或问题,但不能同时这样一个外键将是无效的。

user_id在喜欢的表格中是放置类似的用户。

如何计算每个用户的问题和答案上的喜欢数量?

+0

你正在寻找的每一个总的问题和答案,或列合并喜欢? – yanman1234

+0

合并....... –

回答

1

一种方法是使用union all

select 'questions' as which, count(*) 
from questions q join 
    likes l 
    on l.question_id = q.id 
where q.user_id = $user_id 
union all 
select 'answers' as which, count(*) 
from answers a join 
    likes l 
    on l.answer_id = a.id 
where a.user_id = $user_id; 

编辑:

如果你想要的结果为所有用户在一排,然后是相关子查询是一个非常简单的方法:

select u.*, 
     (select count(*) 
     from questions q join 
       likes l 
       on l.question_id = q.id 
     where q.user_id = u.id 
     ) as question_likes, 
     (select count(*) 
     from answers a join 
       likes l 
       on l.answer_id = a.id 
     where a.user_id = u.id 
     ) as answer_likes 
from users u; 
+0

美丽,但你传递user_id作为参数,我想要的是每个用户行保持总喜欢count的一行,所以我需要加入用户。 –

+0

@ AhmadAl-kheat。 。 。这是编辑版本所做的。 –

2

如果我正确理解,您需要为每个用户ID计数喜欢,这些用户ID由答案和问题一起获得。

如果是这样,那么一个办法是:

select coalesce(questions.user_id, answers.user_id) as liked_user_id, count(*) 
from likes 
left join questions 
on likes.question_id = questions.id 
left join answers 
on likes.answer_id = answers.id 
group by liked_user_id 
相关问题