2010-07-16 11 views
6

Tengo una declaración como la siguiente. La orden devuelta es 1,4,5. Mi código espera 4,5,1 debido a las reglas de precedencia de salida. ¿Cómo hago que mysql devuelva el orden que especifiqué?MySql en orden de conjunto?

select * 
from Post 
where flag='0' and id in(4,5,1) 

Respuesta

13
select * 
from Post 
where flag='0' and id in(4,5,1) 
ORDER BY FIND_IN_SET(id, '4,5,1') 

MySQL Doc para FIND_IN_SET

+0

¡agradable! (yadayada) – knittl

+0

¡Agradable! parece que me lo da en el orden 1 5 4 (escribiendo esto como una nota para otros) pero .Reverse() en .NET resuelve eso: D –

+0

@acidzombie: también se puede ordenar por find_in_set (...) desc – knittl

0

sin una orden por cláusula mysql es libre de devolver el resultado en el orden que desee.

tendría que especificar el orden con order by

+3

Esto es técnicamente cierto, pero no es muy útil. – MJB

0

Tal vez puedas probar:

SELECT * FROM Post WHERE flag='0' AND id = 4 
UNION 
SELECT * FROM Post WHERE flag='0' AND id = 5 
UNION 
SELECT * FROM Post WHERE flag='0' AND id = 1 

Es terriblemente ineficiente, pero no va a requerir usted para cambiar su esquema

+0

... y no lo hará resolver el problema. – MJB

0

Una posible solución:

select * 
from Post 
where flag='0' and id = 4 
UNION 
select * 
from Post 
where flag='0' and id = 5 
UNION 
select * 
from Post 
where flag='0' and id = 1 
+0

sql opera en conjuntos, y mysql puede devolver esas consultas de unión en cualquier orden (aunque generalmente las devuelve sin reordenar) – knittl

+0

Esto todavía no soluciona la pregunta. – MJB

4

Pruebe un pedido más explícito: ORDER BY FIELD(id,4,5,1);

Cuestiones relacionadas