2014-08-28 2 views
0

Не знаю, находится ли заголовок, поскольку я не могу найти лучшее описание. Я попытаюсь прояснить это здесь, но это немного сложно.Несколько IF в IF в порядке заказа в MySQL

Я работаю над системой заказов с ручками. Каждый случай можно разделить на этапы, но не всегда. Все, поэтому каждый случай будет в какой-то момент получить состояние «В процессе производства». Состояние «В производстве» имеет 2 даты для случаев без стадий и 2 даты для случаев со стадиями - один для крайнего срока, когда он должен быть в производстве, и один для тех случаев, когда он фактически был введен в производство.

Теперь это дает мне 4 даты. Мне нужно заказать свой запрос.

Моя проблема заключается в том, что случаи «в производстве» должны быть упорядочены вместе, а случаи не «в производстве» должны быть упорядочены вместе, независимо от того, является ли это случаем с этапами или нет. Мне просто нужно посмотреть на разные поля, в зависимости от того, в каком случае есть этапы или нет.

Как это сделать?

Я попытаюсь сделать изображение, чтобы сделать его более понятным.

enter image description here e21, e23, r532i и r571a - это все даты, и их следует заказывать как даты.

+1

а не так много теории ... пожалуйста, покажите пример схему, ввод и ожидаемый результат .... * теория скучна быть честными * – NoobEditor

ответ

0

Вы можете использовать несколько ifs для выбора и заказа. Однако при больших объемах данных это может стать неэффективным.

Пример:

select id, if(id < 2, if (id > 6, 7, 8), 4) 
from a 
order by if(id < 2, if (id > 6, 7, 8), 4); 

+----+------------------------------------+ 
| id | if(id < 2, if (id > 6, 7, 8), 4) | 
+----+------------------------------------+ 
| 2 |         4 | 
| 3 |         4 | 
| 4 |         4 | 
| 5 |         4 | 
| 6 |         4 | 
| 11 |         4 | 
| 12 |         4 | 
| 13 |         4 | 
| 1 |         8 | 
+----+------------------------------------+ 
+0

Вдохновением из вашего примера, я сделал это: 'IF (e.e3 IS NULL, IF (o5.r571! = 1, o5.r532i, o5.r571a), IF (e.e22! = 1, e.e21, e.e23)) ASC ' и, похоже, работает, но у меня есть один вопрос. Теперь он возвращает это: 0000-00-00 0000-00-00 2014-02-15 2014-03-04 Могу ли я поставить эти 0000-00-00 записи на днище, и по-прежнему имеют восходящая сортировка с действительными датами? – Mhystique

+0

Вы можете скопировать свой заказ по предложению с дополнительным IFNULL (, '2035-01-01'), так что для заказа даты в будущем используется в случае значений NULL. –