2016-02-18 7 views
0

Как выбрать mystatus поле, которое содержит только 0выберите запись, GROUP_CONCAT() содержит символ

select c.id,count(*), 
     group_concat(distinct(r.status not in ('Done','None'))) as mystatus 
from cases c inner join reports r 
on (c.id = r.parent_id and r.parent_type = 'Cases' and r.deleted = 0) 
where c.deleted = 0 
and c. status <> 'Late' 
group by c.id 

Результат выглядит так, но я хочу, чтобы выбрать только для mystatus содержат 0.

ID count(*) mystatus 
A 1   0 
B 7   0,1 
C 2   0 

Должны быть выбраны записи ID A и C

ответ

1

Добавить предложение HAVING.

select c.id,count(*), 
     group_concat(distinct(r.status not in ('Done','None'))) as mystatus 
from cases c inner join reports r 
on (c.id = r.parent_id and r.parent_type = 'Cases' and r.deleted = 0) 
where c.deleted = 0 
and c. status <> 'Late' 
group by c.id 
having mystatus = '0' 
+0

Это работа для меня: D Большое вам спасибо. – May

1

Вы должны использовать пункт HAVING:

select c.id,count(*), 
     group_concat(distinct(r.status not in ('Done','None'))) as mystatus 
from cases c inner join reports r 
on (c.id = r.parent_id and r.parent_type = 'Cases' and r.deleted = 0) 
where c.deleted = 0 and c. status <> 'Late' 
group by c.id 
having count(case when r.status <> 0 then 1 end) = 0 

предикат пункта HAVING использует условное агрегацию, чтобы отфильтровать c.id группы, содержащие по меньшей мере один записи с r.status <> 0.

Примечание: Использование r.status <> '0' в случае r.status Поле имеет характер.

+0

Вам не нужны апострофы, так как мой статус является столбцом строки? – sagi

+0

@sagi См. Примечание, которое я добавил непосредственно перед вашим комментарием! –

+1

Действительно, вы сделали :) +1 – sagi