2013-03-02 3 views
1

принять Пожалуйста, посмотри на этом условном MySQL Query:Mysql условного случай запрос - выяснить, сколько строк каждое условие возвращается

SELECT attr1,attr2,attr3 FROM table 
WHERE 
(attr1 LIKE '%cond1%' OR attr1 LIKE '%cond2%') 
OR 
(attr2 BETWEEN '30' AND '45') 
OR 
(attr3 IN ('cond3') AND attr3 = 'cond4' AND attr3 BETWEEN '18' AND '30') 
ORDER BY CASE 
WHEN (attr1 LIKE '%cond1%' OR attr1 LIKE '%cond2%') THEN 1 
WHEN (attr2 BETWEEN '30' AND '45') THEN 2 
ELSE 3 
END 

Есть ли способ я могу получить с MySQL и PHP числа строк, каждое условие возвращается? Или в состоянии аренды 3?

Мне нужно знать, что условие 3 возвратило 200 строк, например, и сохранит это значение в переменной php.

+0

Вы должны запустить два разных запроса, чтобы получить как данные, так и количество результатов одного из ваших условий. – mavrosxristoforos

ответ

1

Вы можете использовать CASE WHEN ... THEN ... ELSE ... END с SUM (или COUNT использованием NULL как ELSE результата) как выражение в SELECT. Используя примеры вы приведенные выше, вы могли бы сделать что-то вроде этого:

SELECT 
    SUM(CASE WHEN attr1 LIKE '%cond1%' OR attr1 LIKE '%cond2%' THEN 1 ELSE 0 END) AS condition1count, 
    SUM(CASE WHEN attr2 BETWEEN '30' AND '45' THEN 1 ELSE 0 END) AS condition2count, 
    SUM(CASE WHEN attr3 IN ('cond3') AND attr3 = 'cond4' AND attr3 BETWEEN '18' AND '30' THEN 1 ELSE 0 END) AS condition3count 
FROM 
    table 
... 

Имейте в виду, однако, что в зависимости содержание данных некоторые строки могут соответствовать более чем один из 3-х условий, и т.д. общее число из трех счетчиков может быть больше количества возвращенных строк.