2010-03-25 6 views
4

J'ai une liste d'identifiants délimités par des virgules que je veux utiliser pour extraire des enregistrements de la base de données. Je peux utiliser l'instruction IN pour obtenir les résultats mais je souhaite que l'ordre des résultats soit le même que celui de la liste d'origine.Instruction SQL IN et ordonnancement des résultats

EG

$list = "3,1,4,2,5"; 
$query = "SELECT * FROM table WHERE id IN (" . $list . ")"; 
$result = @mysql_query($query); 
while($row=mysql_fetch_array($result)){ 
echo($row['id']. ", "); // returns 1, 2, 3, 4, 5 
} 

OK si je reçois les résultats dans l'ordre qu'ils apparaissent dans la base de données - assez juste, mais je veux que les résultats soient dans le même ordre que la liste initiale, je veux SQL pour récupérer 3 en premier, puis 1 etc ...

Y a-t-il une commande SQL pour faire ceci ou dois-je juste arranger le résultat comme j'en ai besoin par un brassage de tableau? Quelle est la meilleure façon de procéder?

grâce

+0

http://stackoverflow.com/questions/396748/ordering-by-the-order-of-values-in-a-sql-in-clause – webbiedave

Répondre

9
$query = "SELECT * FROM table WHERE id IN (" . $list . ") ORDER BY FIND_IN_SET(id, '".$list."')"; 
+0

Ca y est ... fonctionne très bien merci beaucoup! – undefined

Questions connexes