Моя строка запроса похожа:
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
Для результатов я хочу записи, которые встречаются condition1
быть возвращенным сначала, затем записи, которые встречаются condition2
, и наконец записи, которые встречаются condition3
. Какие-либо идеи?
Чтобы получить нужную сортировку, используйте ваши условия в ORDER BY, но используйте DESC
после них.
SELECT *
FROM person
WHERE (condition1 OR condition2 OR condition3)
AND maintable.status = static
ORDER BY
condition1 DESC,
condition2 DESC,
condition3 DESC
Если это не сработает, потому что ваш запрос более сложен, вы можете использовать логическую логику, чтобы изменить свой запрос (A OR B OR C) AND D
на (A AND D) OR (B AND D) OR (C AND D)
, тогда вы можете использовать следующий запрос:
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
AND static
здесь не требуется, потому что все строки возвращают его, но в более сложном пример (где вы также возвращаете некоторые строки, которые не являются статическими), вам придется сделать это таким образом.
Это должно работать:
ORDER BY condition1, condition2, condition3
например
ORDER BY (weight > 500), (height > 3), (height < 2)