Метод сортировки результатов MYSQL по произвольной букве (т. Е. Показать все строки, начинающиеся с F в первую очередь) - PullRequest
0 голосов
/ 19 марта 2010

У меня есть столбец состояний, и, в зависимости от запроса, я хочу упорядочить результаты по определенному состоянию, а затем по id (Asc или Desc, в зависимости). Например, я мог бы хотеть показать все строки с состоянием "HI", отсортированные по ID desc, а затем все остальные строки, отсортированные по id desc.

Я надеялся, что смогу сделать это в одном запросе, вместо того, чтобы получить все результаты моего избранного состояния, а затем получить остальные. Могу я?

Ответы [ 2 ]

1 голос
/ 19 марта 2010

Как насчет:

SELECT id, state
FROM sometable
ORDER BY IF(state = 'HI', 0, 1) ASC, id DESC;

Сначала будут отсортированы строки «HI». Если вы хотите, чтобы они были последними, измените ASC на DESC.

1 голос
/ 19 марта 2010

У вас есть два варианта:

  • сделать союз
  • написать функцию и использовать ее для упорядочения строк по

В первом случае вы могли бы сделать что-то вроде

select 1 as res_order, ...
  ...
  where state like 'hi%'
union
select 2 as res_order, ...
  ...
  where state not like 'hi%'
order by res_order asc, id desc

Во втором случае вы могли бы сделать что-то вроде

select my_function(state, "hi") as row_order, ...
  ...
  order by row_order

где функция возвращает более низкие значения для соответствующих состояний.

Код не в моей голове: для его запуска может потребоваться некоторая настройка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...