2014-09-01 34 views
0

想user_answer.status只有user_answer.user_id = 10有条件的字段添加到查询的输出

我用这个SQL查询,返回从多个表的结果(问题选择,q_t标签user_answer

SQL:

select question.text,group_concat(tag.text), count(user_answer.question_id) as tt 
from question 
left join q_t on question.id = q_t.wall_id 
left join user_answer on question.id = user_answer.question_id 
left join tag on q_t.tag_id = tag.id 
where question.id in (1000001,1000002,1000003,1000004,1000005) 
group by question.text 
order by field(question.id,1000001,1000002,1000003,1000004,1000005) 

结果:

text       text     tt 
where is England?   Geography,Continent  33 
how many ...?    sport,Europe    2 

我需要添加新的user_answer表中选择user_answer.status,与条件(仅适用于获取该选择):

select user_answer.status  
where user_answer.user_id = 10 

如何添加此条件?

感谢,

+0

这让你的问题感到困惑:“有条件(只适用于检索这个选择)”。你已经尝试过了什么? – Bulat 2014-09-01 10:57:16

+0

@Bulat我只想在user_id表中选择状态user_id = 10 – mwafi 2014-09-01 11:06:46

+0

如果user_id!= 10,你希望状态字段为NULL吗? – Bulat 2014-09-01 11:15:09

回答

1

可以用case做时:

select 
    question.text,group_concat(tag.text), 
    count(user_answer.question_id) as tt, 
    CASE WHEN user_answer.user_id = 10 THEN user_answer.status ELSE NULL END as status 
from question 
left join q_t on question.id = q_t.wall_id 
left join user_answer on question.id = user_answer.question_id 
left join tag on q_t.tag_id = tag.id 
where question.id in (1000001,1000002,1000003,1000004,1000005) 
group by 
    question.text, 
    CASE WHEN user_answer.user_id = 10 THEN user_answer.status ELSE NULL END 
order by field(question.id,1000001,1000002,1000003,1000004,1000005); 

如果要适用于所有问题,你可以使用MAX状态:

select 
    question.text,group_concat(tag.text), 
    count(user_answer.question_id) as tt, 
    MAX(CASE 
     WHEN user_answer.user_id = 10 
     THEN user_answer.status 
     ELSE NULL 
     END) as status 
from question 
left join q_t on question.id = q_t.wall_id 
left join user_answer on question.id = user_answer.question_id 
left join tag on q_t.tag_id = tag.id 
where question.id in (1000001,1000002,1000003,1000004,1000005) 
group by 
    question.text 
order by field(question.id,1000001,1000002,1000003,1000004,1000005); 
+0

这是工作正常,但它为总数“count(user_answer.question id)”复制了行,对于id为10的用户更新了答案 – mwafi 2014-09-01 11:35:47

+0

,再次只是猜测输出可能是什么。 – Bulat 2014-09-01 11:40:17

0
select question.text,group_concat(tag.text), count(user_answer.question_id) as tt 
    ,if((user_answer.id=10),(select user_answer.status),(''))as status 
    from question`enter code here` 
    left join q_t on question.id = q_t.wall_id 
    left join user_answer on question.id = user_answer.question_id 
    left join tag on q_t.tag_id = tag.id 
    where question.id in (1000001,1000002,1000003,1000004,1000005) 
    group by question.text 
    order by field(question.id,1000001,1000002,1000003,1000004,1000005)