Mysql - Как отсортировать строки на основе 2 столбцов в неправильном порядке? - PullRequest
1 голос
/ 27 марта 2020

У меня есть таблица со структурой ниже

id| name | read | status   | is_assigned | created_at
1 | ABC  | 0    | ordered  | 0           | 2020-03-27 11:48:38
2 | XYZ  | 1    | accepted | 1           | 2020-03-27 11:48:38
3 | DEF  | 0    | ordered  | 0           | 2020-03-25 11:48:38
4 | JKL  | 1    | accepted | 0           | 2020-03-16 11:48:38
5 | GHI  | 1    | on-hold  | 1           | 2020-03-23 11:48:38

Я хочу установить приоритет сортировки, как показано ниже:

  1. Где читать = 0
  2. Где Статус = заказано
  3. Где статус = принято, но is_assigned = 0
  4. Сортировать по created_at DESC

Мой запрос действителен только для created_at и read столбцы, т. е.

select * from orders order by read ASC, created_at DESC

Как мне выполнить приведенный выше порядок сортировки для описанной таблицы и отобразить этот запрос в Laravel Query Builder

TIA

1 Ответ

1 голос
/ 27 марта 2020

Вы можете напрямую перевести свои логики c в предложение order by, используя MySQL возможность оценить условия: 0/1 значения:

order by
    (read = 0) desc,
    (status = 'ordered') desc,
    (status = 'accepted' and is_assigned = 0) desc,
    created_at
...