MySQL, указывающий точный порядок, с ГДЕ 'идентификатор' В (…)

Есть ли простой способ заказать результаты MySQL соответственно ГДЕ id В (...) пункте? Пример:

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), так как те идентификаторы являются динамичными и автоматически заказаны.

8
задан Gray Fox 2 June 2010 в 13:41
поделиться

3 ответа

Да, вроде того:

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 и немного попахивает.

14
ответ дан 5 December 2019 в 09:24
поделиться

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

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

0
ответ дан 5 December 2019 в 09:24
поделиться

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
1
ответ дан 5 December 2019 в 09:24
поделиться
Другие вопросы по тегам:

Похожие вопросы: