MySQL указывает точный порядок с WHERE `id` IN (...) - PullRequest
8 голосов
/ 02 июня 2010

Есть ли простой способ упорядочить результаты MySQL соответственно с помощью предложения WHERE id IN (...)? Пример:

SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3)

чтобы вернуть

Article with id = 4
Article with id = 2
Article with id = 5
Article with id = 9
Article with id = 3

, а также

SELECT * FROM articles WHERE articles.id IN (4, 2, 5, 9, 3) LIMIT 2,2

чтобы вернуть

Article with id = 5
Article with id = 9

Обновление: если быть более точным, я хочу избежать искажения данных в скобках в WHERE articles.id IN (4, 2, 5, 9, 3), поскольку эти идентификаторы являются динамическими и автоматически упорядочиваются.

Ответы [ 4 ]

14 голосов
/ 02 июня 2010

Да, вроде:

SELECT * FROM articles
WHERE articles.id IN (4, 2, 5, 9, 3)
ORDER BY FIND_IN_SET(articles.id, '4,2,5,9,3')

но это нестандартный SQL и немного пахнет.

3 голосов
/ 27 ноября 2012

Это работает для меня: ЗАКАЗ ПО ПОЛЯМ (Product.id, 4,9,8,5,3,11,24,16)

1 голос
/ 02 июня 2010

MySQL сортирует только с ORDER BY. Вот почему нередко таблицы таблиц базы данных имеют нечто вроде столбца ординальности.

articles
+----+------------+-------+
| id | ordinality | (...) |
+----+------------+-------+
|  2 |          2 |    '' |
|  3 |          5 |    '' |
|  4 |          1 |    '' |
|  5 |          3 |    '' |
|  9 |          4 |    '' |
+----+------------+-------+

SELECT *
  FROM articles
 WHERE articles.id IN (4, 2, 5, 9, 3)
 ORDER BY articles.ordinality
0 голосов
/ 02 июня 2010

Я не думаю, что вы можете сделать это. Там нет "явного" упорядочения; оператор "in" просто говорит вам, что извлечь, и не имеет информации о порядке.

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

...