Je me demande s'il existe un moyen (peut-être un meilleur moyen) de classer par ordre des valeurs dans une clause IN ().
Le problème est que j'ai 2 requêtes, une qui obtient tous les identifiants et la seconde qui récupère toutes les informations. Le premier crée l'ordre des ID par lesquels je veux que le second trie. Les ID sont placés dans une clause IN () dans le bon ordre.
Ce serait donc quelque chose comme (extrêmement simplifié):
SELECT id FROM table1 WHERE ... ORDER BY display_order, name
SELECT name, description, ... WHERE id IN ([id's from first])
Le problème est que la deuxième requête ne renvoie pas les résultats dans le même ordre que les ID sont placés dans la clause IN ().
Une solution que j'ai trouvée est de mettre tous les ID dans une table temporaire avec un champ à incrémentation automatique qui est ensuite joint à la deuxième requête.
Y a-t-il une meilleure option?
Remarque: Comme la première requête est exécutée «par l'utilisateur» et la seconde est exécutée dans un processus d'arrière-plan, il n'y a aucun moyen de combiner la requête 2 en 1 à l'aide de sous-requêtes.
J'utilise MySQL, mais je pense qu'il pourrait être utile de noter les options disponibles pour les autres bases de données.
IN
et lesFIELD
paramètres sont égaux. Faire cela dans un code de programme peut être plus rapide en utilisant ces connaissances supplémentaires. Bien sûr, il pourrait être plus sage de placer cette charge sur le client plutôt que sur le serveur si vous avez à l'esprit les performances du serveur.