2010-09-16 10 views
3

J'ai cette requête:Trier les enregistrements SQL en fonction des conditions adaptées

SELECT * FROM table WHERE key LIKE '1,2,3,%' OR key LIKE '1,2,%' OR key LIKE '1,%' 

est-il pour trier les enregistrements posible renvoyés par cette requête basée sur des conditions qui ont été adaptées en premier. J'aimerais obtenir tous les enregistrements qui correspondent key LIKE '1,2,3,%' d'abord, puis key LIKE '1,2,%' et les autres après.

Par exemple, si j'ai ces documents:

key: "1,2,3,4" 
key: "1,2,5" 
key: "1,4" 
key: "1,2,5,6" 
key: "1,3" 
key: "1,2,3,4,7" 
key: "1,2,4" 

Je les aime à trier comme ceci:

key: "1,2,3,4" 
key: "1,2,3,4,7" 
key: "1,2,4" 
key: "1,2,5" 
key: "1,2,5,6" 
key: "1,3" 
key: "1,4" 

Est-il possible de faire?

+0

Eh bien, qu'avez-vous essayé? Notez que c'est juste un tri lexical normal des chaînes ... –

+0

Votre requête est redondante. en utilisant simplement "WHERE key LIKE '1,%'" vous donnera les mêmes résultats. –

+0

@Kevin, oui vous avez absolument raison. Puisque j'utilise maintenant les conditions plus spécifiques dans le "ORDER BY CASE", j'ai maintenant changé ma condition WHERE à seulement "1,%". – remi

Répondre

2

.... ORDER BY CASE
WHEN key LIKE '1,2,3,%' THEN 1
WHEN key LIKE '1,2,%' THEN 2
ELSE 3
END

+0

Je voudrais utiliser cela comme il m'est familier. –

+0

Merci! C'est exactement ce que j'ai utilisé. Il me semble que l'utilisation d'une recherche en texte intégral est un peu trop lourde pour ce cas particulier. – remi

1

L'utilisation de "UNION" pourrait-elle faire l'affaire?

SELECT * FROM table WHERE clé LIKE '1,2,3,%' UNION SELECT * FROM table WHERE clé LIKE '1,2,%' UNION SELECT * FROM table WHERE clés comme clé LIKE ' 1,% '

Questions connexes