2010-04-10 6 views
17

La mia stringa di query è simile:Come rendere l'ordine delle condizioni ORDER BY dei risultati della query 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 

Per i risultati che voglio le voci che soddisfano condition1 da restituire, poi le voci che soddisfano condition2 e, infine, le voci che soddisfano condition3. Qualche idea?

+1

Le vostre condizioni sono distinte? In caso contrario, cosa succede se una voce soddisfa più condizioni? Ad esempio, se una voce soddisfa le condizioni 1 e 3, come deve essere ordinata rispetto a una voce che soddisfa le condizioni 1 e 2? –

+0

non ci sono restrizioni qui, quindi penso che forse prima incontri il primo ritorno? – Edward

risposta

24

Per ottenere l'ordinamento nell'ordine che si desidera, utilizzare le condizioni in ORDER BY, ma utilizzare DESC dopo di loro.

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

Se questo non funziona perché la query è più complessa, quindi è possibile utilizzare la logica booleana per modificare la tua ricerca (A OR B OR C) AND D in (A AND D) OR (B AND D) OR (C AND D) quindi è possibile utilizzare la seguente 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 

Il AND static non è necessario qui perché tutte le righe lo restituiscono, ma in un esempio più complesso (dove si restituiscono anche alcune righe che non sono statiche), si dovrebbe farlo in questo modo.

+1

+1 per riconoscere che 'DESC' è necessario! –

+0

come circa la condizione (ho la mia stringa di query aggiornata) è come table.id = 123? Ho provato la frase ORDER BY, ma nessun effetto. – Edward

+0

@Relax: l'esempio che ho fornito prima funzionerebbe correttamente. L'ho aggiornato comunque perché suppongo che la tua query sia più complessa di quanto tu possa permetterci di conoscere. –

7

Questo dovrebbe funzionare:

ORDER BY condition1, condition2, condition3 

ad esempio

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

grazie, ma non funziona, potrebbe essere perché la mia stringa di query effettiva è più complessa, l'ho aggiornata – Edward

Problemi correlati