Подтвердить что ты не робот

Как сделать результаты запросов MYSQL? ЗАКАЗАТЬ заказами условий?

Моя строка запроса похожа:

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. Любые идеи?

4b9b3361

Ответ 1

Чтобы получить сортировку в нужном порядке, используйте свои условия в 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 здесь не требуется, потому что все строки возвращают его, но в более сложном примере (где вы также возвращаете некоторые строки, которые не являются статическими), тогда вам придется делать это таким образом.

Ответ 2

Это должно работать:

ORDER BY condition1, condition2, condition3

например

ORDER BY (weight > 500), (height > 3), (height < 2)