2010-07-08 10 views
1

Je voudrais savoir s'il est possible de commander par un ensemble délimité par des virgules renvoyé par une sous-requête?Ordre mysql par valeur de colonne délimitée par des virgules

Je donne les résultats suivants:

SELECT navigation.id, documents.template_id 
FROM navigation 
INNER JOIN documents 
    ON navigation.document_id = documents.id 
    AND FIND_IN_SET(navigation.id,(SELECT numeric_lineage 
            FROM navigation WHERE id = #id#)) 
ORDER BY ??? 

Maintenant, je ne suis pas certain que je voudrais aller sur la commande des résultats dans le même ordre que l'ensemble dans numeric_lineage délimité par des virgules. C'est possible? Je préférerais ne pas avoir à faire une autre sous-requête si possible.

Merci

Répondre

4

Vous pouvez utiliser FIND_IN_SET dans la clause ORDER BY:

ORDER BY FIND_IN_SET(navigation.id, (SELECT numeric_lineage 
             FROM navigation WHERE id = #id#)) 
+1

Impressionnant, je ne savais pas que cela était possible! Je suis juste préoccupé par avoir 2 sous-requêtes maintenant. Serait-il plus avantageux (chargement du serveur) de faire une requête séparée pour numeric_lineage, en remplaçant les 2 sous-requêtes par la chaîne, et en utilisant un IN au lieu du premier FIND_IN_SET? J'ai toujours été sous les sous-requêtes d'impression "étaient le diable"? ;-) – Bjorn

+0

@Bjorn: Si les sous-requêtes étaient si mauvaises, la fonctionnalité aurait été entièrement supprimée. Du point de vue de la maintenance, il est très difficile d'avoir des requêtes identiques, mais MySQL ne supporte pas la clause WITH (pas sûr qu'elle le supporterait de toute façon), donc je ne vois pas de solution au problème. –

+0

Super, merci pour votre aide. Très apprécié! :-) – Bjorn

Questions connexes