Как выбрать строки MySQL в порядке предложения IN - PullRequest
9 голосов
/ 13 февраля 2011

Например, у меня есть в таблице EMPLOYEE:

(code, name)
(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )

, если вы сделаете: (выберите * из EMPLOYEE), вы получите:

(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )

, если сделаете: (выберите* от СОТРУДНИКА, где код в (1,3,2,4) вы получите:

(1, 'Jimmy')
(2, 'Albert')
(3, 'Michelle')
(4, 'Felix' )

Как получить его в порядке значений CSV в предложении IN, как есть?

(1, 'Jimmy')
(3, 'Michelle')
(2, 'Albert')
(4, 'Felix' )

Ответы [ 2 ]

18 голосов
/ 13 февраля 2011

Используйте функцию FIND_IN_SET :

SELECT e.* 
  FROM EMPLOYEE e 
 WHERE e.code in (1,3,2,4) 
ORDER BY FIND_IN_SET(e.code, '1,3,2,4')

Или используйте оператор CASE:

SELECT e.* 
  FROM EMPLOYEE e 
 WHERE e.code in (1,3,2,4) 
ORDER BY CASE e.code
           WHEN 1 THEN 1 
           WHEN 3 THEN 2
           WHEN 2 THEN 3
           WHEN 4 THEN 4
         END
1 голос
/ 13 февраля 2011

Общим решением этой проблемы, сохраняя порядок на основе вашего входного (CSV) файла, является добавление столбца AUTO_INCREMENT в таблицу и порядок на основе этого. Возможно, вы никогда не отобразите его как часть своего запроса, но вы можете заказать его, чтобы получить исходный порядок во входном файле после импорта.

...