web-dev-qa-db-ja.com

MYSQLクエリ結果をORDERBY条件の順序にする方法は?

私のクエリ文字列は次のようなものです。

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に一致するエントリを返します。何か案は?

21
Edward

希望する順序で並べ替えるには、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はすべての行がそれを返すため、ここでは必要ありませんが、より複雑な例(静的ではないいくつかの行も返す)では、この方法で行う必要があります。

31
Mark Byers

これは機能するはずです:

ORDER BY condition1, condition2, condition3

例えば

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