2016-10-22 6 views
0

Мне нужен запрос, который группирует результаты вместе, если значение job_num = 0, но мне не удалось выяснить, как это сделать.MySQL GROUP, если значение равно 0

Это мой запрос, как он стоит (и не работает, я получаю ошибку SQL) ...

SELECT SQL_CALC_FOUND_ROWS * FROM calls 
WHERE parent_id = '$term' GROUP BY IF (job_num != 0) 
ORDER BY date_start DESC LIMIT $page_position, $item_per_page 

Я попытался заменить job_num != 0 с job_num IS NOT NULL и получить тот же результат.

Остальная часть запроса работает отлично, пока я не попытался исключить job_num != 0

Это упрощенная версия таблицы

id | call_ref | job_num 
_______________________ 

1 | 123445 | 2389 
_______________________ 

2 | 342537 | 0 
_______________________ 

3 | 876483 | 2389 
_______________________ 

4 | 644686 | 5643 
_______________________ 

5 | 654532 | 0 

Я хотел бы сгруппировать строки, где job_num! = 0, но Я все еще хочу отображать строки, где job_num = 0 просто не сгруппированы. Call_ref не уникален, и в таблице есть еще 31 столбца, в которых мне нужны значения.

Используя вышеприведенные примеры строк с идентификаторами 1 и 3 будут сгруппированы, а 2,4 и 5 будут по-прежнему возвращать результаты, но не сгруппированы.

Результаты, которые я хотел бы ...

1 и 3 сгруппированы (потому что job_nums одинаковы, но! = 0) 2, 4, 5 не сгруппированных

+1

Предоставить примеры данных и желаемых результатов. Просто нечувствительно использовать 'select *' с 'group by'. –

+0

Почему бы не поставить job_num! = 0 в where clause? – McNets

+0

@mcNets, потому что в идеале я хотел бы показывать результаты с job_num!= 0, мне просто не нужны результаты с этим значением, сгруппированным вместе – tatty27

ответ

1

Вы можете попробовать его с UNION?

(SELECT SQL_CALC_FOUND_ROWS * FROM calls 
WHERE parent_id = '$term' where job_num != 0 GROUP BY (job_num) 
ORDER BY date_start DESC LIMIT $page_position, $item_per_page) 
UNION 
(SELECT SQL_CALC_FOUND_ROWS * FROM calls 
WHERE parent_id = '$term' where job_num = 0 
ORDER BY date_start DESC LIMIT $page_position, $item_per_page); 
+0

Спасибо, но это связано с синтаксической ошибкой после UNION. Спасибо за попытку помочь хотя :) Я еще раз посмотрю на UNION и посмотрю, где ошибка. – tatty27

+0

@ tatty27 Я изменил его в соответствии с документацией mysql – McNets

+0

Я не отвечаю на вопросы. Но этого заслуживает потому, что он использует 'SELECT *' с 'GROUP BY'. –

1

, если вы используете эту просьбу PHP код Постарайся

SELECT SQL_CALC_FOUND_ROWS FROM calls 
WHERE parent_id = \'$term\' GROUP BY IF job_num <> 0 
ORDER BY date_start DESC LIMIT $page_position, $item_per_page; 
+0

Спасибо, но получает синтаксическую ошибку около 'job_num! = 0 ORDER BY – tatty27

0

Основываясь на этот комментарий:

@mcNets, потому что в идеале я хотел бы показать ю Результаты е с job_num ! = 0, я просто не хочу результаты с этим значением сгруппированы вместе

Вы не хотите group by (хотя я не понимаю, что «это значение» относится к). Я отмечаю, что это прямо противоречит первому предложению вопроса.

Это делает то, что вы хотите?

SELECT SQL_CALC_FOUND_ROWS c.* 
FROM calls c 
WHERE c.parent_id = '$term' AND job_num <> 0 
ORDER BY date_start DESC 
LIMIT $page_position, $item_per_page; 

EDIT:

Это происходит со мной, что вы можете просто хотите строки со значением 0 появляться вместе, а остальные появляются вместе. Если это так, поставить условие в ORDER BY:

SELECT SQL_CALC_FOUND_ROWS c.* 
FROM calls c 
WHERE c.parent_id = '$term' 
ORDER BY (job_num = 0), date_start DESC 
LIMIT $page_position, $item_per_page; 
+0

Спасибо, но он не отображает строки, где job_num! = 0. Мне нужен результат, чтобы сгруппировать результаты job_num, где job_num! = 0, но я все еще вам нужно отобразить job_num = 0 строк. Я попытаюсь объяснить больше в моем вопросе. – tatty27

+0

@ tatty27. , , Это явно отображает строки, где 'job_num' не равно 0. Это в предложении' where'. –

+0

Да, это так, но я хочу видеть строки, где job_num равно 0, просто не сгруппированы. Я хотел бы, чтобы строки с соответствующими значениями job_num были сгруппированы, кроме строк, где job_num = 0, которые не сгруппированы. – tatty27

0

Попробуйте это один

SELECT * 
FROM 
    (SELECT SQL_CALC_FOUND_ROWS * 
    FROM calls 
    WHERE parent_id = '$term' 
     AND job_num != 0 
    GROUP BY job_num 
    UNION SELECT SQL_CALC_FOUND_ROWS * 
    FROM calls 
    WHERE parent_id = '$term' 
     AND job_num = 0) AS T 
ORDER BY date_start DESC LIMIT $page_position, 
           $item_per_page