Par exemple: Sélectionnez * de T où T.Id in (4,78,12,45) P>
Je souhaite que le jeu d'enregistrement retourné, juste commander par la position de la clause "in '. Comment puis-je faire cela? P>
3 Réponses :
Dans le cas général, vous ne pouvez pas. SQL ne garantit pas la commande sauf si vous utilisez la clause code> par code>, et il ne peut pas être lié au contenu d'un code> dans la déclaration code>.
Cependant, si vous Peut construire une table temporaire qui commande les valeurs que vous sélectionnez à partir de, vous pouvez vous joindre à ce tableau et commander par elle. p>
Par exemple, vous avez une table temporaire qui contient quelque chose comme ce qui suit: p> alors vous pouvez le commander comme ceci: p>
Bien que j'aime la propreté de la solution, Paul Dixon propose. Cela pourrait être plus facile à comprendre et peut même être plus rapide.
Vous pouvez le faire en utilisant Find_in_set , par exemple pendant que vous devez dupliquer la liste, si vous générez la requête en code, ce n'est pas un problème énorme. P> p >
+1 pour m'apprécier quelque chose que je ne connaissais pas sur MySQL!
Pour de tels cas comme celui-ci, cela devrait être assez efficace, mais si votre liste de sélection est grande, j'imagine que l'approche de la table temporaire sera plus efficace.
Woo hoo! Cette réponse m'a eu sur la page une de la liste des utilisateurs (probablement fugitivement - je l'ai fait une fois auparavant en avril, continua de vacances pendant deux semaines et il est pris pendant 4 mois pour y retourner!)
Merci pour votre réponse! Mais que si j'avais besoin de SHA1, les valeurs de l'ensemble?
La réponse est ici, si quelqu'un se demande: Stackoverflow.com/questions/23135556/...
Remarque: Si le deuxième paramètre de Find_in_Set incluait le caractère d'espace, le résultat serait aléatoire.
Vous ne pouvez pas commander par la clause in. Vous devez fournir une commande distincte par clause. Un moyen de faire cela est le suivant en construisant une déclaration de cas dans l'ordre par. Ce n'est pas joli cependant.