MySQL IN Порядок набора результатов оператора - PullRequest
5 голосов
/ 18 ноября 2011

В MySQL при использовании оператора IN можно ли попросить MySQL вернуть набор результатов (набор записей) в том же порядке, в котором был набор IN?

Объяснение: Предположим, у нас есть стол items (item_id, item_name);

и запрос:

select * from items where item_id in (1,3,5,7,2,4,6,8);

можем ли мы иметь набор результатов (набор записей), в котором записи расположены в том же порядке, что и набор операторов IN. то есть 1,3,5,7,2,4,6,8 of record_id с

Это не тот случай; MySQL, похоже, оптимизирует поиск и задает порядок по умолчанию (такой же, как порядок записей, хранящихся в файловой системе).

1 Ответ

10 голосов
/ 18 ноября 2011

Вы можете использовать функцию MySQL field в своем предложении ORDER BY:

select *
from items
where item_id in (1,3,5,7,2,4,6,8)
order by field(item_id, 1,3,5,7,2,4,6,8)

Функция field :

FIELD(str,str1,str2,str3,...)

Возвращает индекс (положение) стр в списке стр.1 , стр2 , стр3 , ... список,Возвращает 0, если str не найден.

Если все аргументы FIELD() являются строками, все аргументы сравниваются как строки.Если все аргументы являются числами, они сравниваются как числа.В противном случае аргументы сравниваются как двойные.

...