2014-09-01 51 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)