2010-11-30 24 views
6

utilicé una consulta mysql donde hay "donde id en (" 22,20,21 ")" pero cuando obtengo el resultado es como una matriz ordenada en orden ascendente, es decir 20,21, 20"where in" cláusula mysql

pero lo necesito en el mismo orden que me dio la cláusula

+0

¿Cuál es la consulta completa? – cambraca

+0

posible duplicado de [¿Cómo puedo solicitar un resultado de la consulta igual que el ID especificado en la condición WHERE?] (Http://stackoverflow.com/questions/3984531/how-can-i-order-a-query-result- same-as-the-id-specified-in-the-where-condition) – deceze

+0

Estoy de acuerdo con @deceze que es un duplicado. no había visto su respuesta o probablemente lo habría señalado en esa dirección. –

Respuesta

18

i piensan que debería ser capaz de utilizar la palabra clave CAMPO así:

SELECT * FROM table 
WHERE id in (22,20,21) 
ORDER BY FIELD(id,22,20,21); 

esto es MySQL específica, y parece mágica, pero funciona.

+0

eso es sorprendente ... – m4tt1mus

+4

Explicar algo de la magia ... Lo que está sucediendo aquí es que la función FIELD busca 'id' en los parámetros restantes que se le pasan, y devuelve un número. Así que si id = 22, FIELD (...) devuelve 0, y si id = 20, devuelve 1. –

+0

@nathan gonzalez muchas gracias ..... gotchaaaaa :) –

2

resultados de SQL no están ordenados a menos que reciba una orden explícita; el pedido no se recogerá de la cláusula in.

Dado que los ID tampoco son ASC ni DESC, tendrías que hacer otra cosa, ORDER BY; ¿Cómo estás determinando el orden de las 22,20,21 en primer lugar?

+0

seleccionar id, dets de los detalles donde id en (22,21,20,19) –

+0

estoy tomando esos ids de otra tabla que es una tabla de asignación –

+0

esto no es cierto en mysql. –

0

No se puede especificar el orden en que se devolverán los resultados en una cláusula WHERE. Si desea especificar el orden, debe agregar una cláusula ORDER BY a su consulta. Para una solución que usa FIND_IN_SET, vea this answer.

2

Como se mencionó ... WHERE cláusula no hace nada con el pedido del conjunto de resultados. Utilice MySQL built-in FIELD function en ORDER BY cláusula para especificar cómo el conjunto de resultados debe ser ordenada:

... WHERE id IN (22, 20, 21) ORDER BY FIELD(id, 22, 20, 21) ... 
0

En general, el sistema de base de datos devuelve los resultados en el orden que se siente. Si quieres que se ordene, tienes que contarlo. This blog post proporciona un método para hacerlo; Es posible que pueda encontrar otras soluciones en línea.

Cuestiones relacionadas