views:

104

answers:

4

I have this query:

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

Is it posible to sort records returned from this query based on which conditions was matched first. I'd like to get all records that match key LIKE '1,2,3,%' first, then key LIKE '1,2,%' and the others after.

For example, if I have these records:

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"

I would like them to be sorted like so:

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"

Is it possible to do?

+2  A: 

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

a1ex07
I would use this as it is familiar to me.
Michael Eakins
Thanks! This is exactly what I used. It seems to me that using a full-text search is a bit too resource-heavy for this particular case.
remi
+3  A: 

Use MATCH ... AGAINST and order by rank. It exactly does what you want.

shamittomar
+1  A: 

Does using "UNION" could do the job?

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

Pascal Bois
+1  A: 

This link might also be of interest as it pertains to your choices and which solution is faster.

http://stackoverflow.com/questions/792875/which-sql-query-is-better-match-against-or-like

I believe it also pertains to @shamittomar's answer.

Michael Eakins