/ / MySQL especificando el orden exacto con WHERE `id` IN (...) - mysql, sql-order-by, in-clause

MySQL que especifica el orden exacto con WHERE `id` IN (…) - mysql, sql-order-by, in-cláusula

¿Hay una manera fácil de ordenar los resultados de MySQL respectivamente por DONDE id IN (...) cláusula? Ejemplo:

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

regresar

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

y también

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

regresar

Article with id = 5
Article with id = 9

Actualización: para ser más específicos, quiero evitar alterar los datos entre paréntesis en WHERE articles.id IN (4, 2, 5, 9, 3), ya que esas ID son dinámicas y se ordenan automáticamente.

Respuestas

14 para la respuesta № 1

Si, mas o menos:

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

pero este es un SQL no estándar y huele un poco.


3 para la respuesta № 2

Esto funciona para mí: ORDEN POR CAMPO (Product.id, 4,9,8,5,3,11,24,16)


1 para la respuesta № 3

MySQL solo se ordena con ORDER BY. Es por eso que no es muy raro que las tablas de la base de datos tengan algo así como una columna de ordinalidad.

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 para la respuesta № 4

No creo que puedas hacer eso. No hay pedidos "explícitos" en curso; la declaración "in" simplemente le dice qué recuperar y no tiene información sobre cómo realizar un pedido.

Dado que los ejemplos que ha dado no tienen un orden obvio, su mejor opción es manejar esto en código después de que se devuelva el resultado.