views:

165

answers:

2

My query string is like:

SELECT ... FROM maintable
LEFT JOIN table1 on (maintable.id = table1.idx)
LEFT JOIN table2 on (table1.idy = table2.idy)
LEFT JOIN table3 on (table2.idz = table3.idz)
WHERE (condition1 OR condition2 OR condition3)
AND maintable.status = static

//condition1 & condition2 & condition3 are kind of
table3.idz = 101, table3.idz = 3, maintable.id IN (1,2,3,4), and so on

For the results I want entries that meet condition1 to be returned first, then entries that meet condition2, and finally entries that meet condition3. Any ideas?

+2  A: 

This should work:

ORDER BY condition1, condition2, condition3

for example

ORDER BY (weight > 500), (height > 3), (height < 2)
Pekka
thanks, but it's not work, it may because my actual query string is more complex, i have it updated
Edward
+2  A: 

To get the sorting in the order you want, use your conditions in the ORDER BY, but use DESC after them.

SELECT *
FROM person
WHERE (condition1 OR condition2 OR condition3)
AND maintable.status = static
ORDER BY
    condition1 DESC,
    condition2 DESC,
    condition3 DESC

If this doesn't work because your query is more complex, then you can use boolean logic to change your query (A OR B OR C) AND D into (A AND D) OR (B AND D) OR (C AND D) then you can use the following query:

SELECT *
FROM person
WHERE (condition1 OR condition2 OR condition3)
AND maintable.status = static
ORDER BY
    condition1 AND static DESC,
    condition2 AND static DESC,
    condition3 AND static DESC

The AND static is not necessary here because all rows return it, but in a more complex example (where you also return some rows which are not static) then you would have to do it in this way.

Mark Byers
+1 for recognizing that `DESC` is needed!
Felix Kling
how about the condition (i have my query string updated) is like table.id = 123 ? I have tried ORDER BY sentence, but no effect.
Edward
@Relax: The example I gave before would work fine. I've updated it anyway because I'm guessing that your actually query is more complex than you will allow us to know about.
Mark Byers
@Mark: You are definetly right! I did not realized that DESC is neccessary even the condition is like table.id=123. Now i have it added and it works like a charm, thanks so much!
Edward