web-dev-qa-db-fra.com

ORDRE MySQL BY IN ()

J'ai un PHP tableau avec des numéros d'ID dedans. Ces numéros sont déjà commandés.

Maintenant, je voudrais obtenir mon résultat via la méthode IN (), pour obtenir tous les ID.

Cependant, ces ID doivent être commandés comme dans la méthode IN.

Par exemple:

IN(4,7,3,8,9)  

Devrait donner un résultat comme:

4 - Article 4  
7 - Article 7  
3 - Article 3  
8 - Article 8  
9 - Article 9

Aucune suggestion? Peut-être qu'il y a une fonction pour le faire?

Merci!

63
Henk Denneboom

Je pense que vous cherchez peut-être une fonction CHAMP - bien que normalement considéré comme une fonction de chaîne, cela fonctionne très bien pour les nombres aussi!

ORDER BY FIELD(field_name, 3,2,5,7,8,1)
139
Alex Martelli

Vous pouvez utiliser FIELD() :

ORDER BY FIELD(id, 3,2,5,7,8,1)

Renvoie l'index (position) de str dans la liste str1, str2, str3, .... Renvoie 0 si str n'est pas trouvé.

C'est une sorte de hack laid, alors n'utilisez-le vraiment que si vous n'avez pas d'autre choix. Le tri de la sortie dans votre application peut être préférable.

8
deceze

SQL standard ne fournit pas de moyen de le faire (MySQL le peut, mais je préfère des solutions neutres pour que je puisse changer de SGBD à tout moment).

C'est quelque chose que vous devez faire en post-traitement après le jeu de résultats est retourné. SQL ne peut les renvoyer que dans un ordre spécifié dans la clause "order by" (ou dans l'ordre any s'il n'y en a pas).

L'autre possibilité (même si je ne l'aime pas, je suis honoré de vous donner le choix) est de faire plusieurs voyages dans la base de données, un pour chaque ID, et de les traiter à mesure qu'ils arrivent:

select * from tbl where article_id = 4;
// Process those.
select * from tbl where article_id = 7;
// Process those.
: : : : :
select * from tbl where article_id = 9;
// Process those.
0
paxdiablo