Как сделать так, чтобы результаты запроса MYSQL были упорядочены по порядку? - PullRequest
20 голосов
/ 10 апреля 2010

Моя строка запроса выглядит так:

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. Есть идеи?

Ответы [ 2 ]

29 голосов
/ 10 апреля 2010

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

9 голосов
/ 10 апреля 2010

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

ORDER BY condition1, condition2, condition3

например

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