2012-03-27 9 views
1

Die unten gezeigte ist meine Frage, die ich mit diesen drei Spalten durch bestellen muss. Dies ist für komplexe Suchlisten. Wenn ich einen von ihnen verwende, funktioniert es perfekt. Aber mehr als einen zu handhaben, wird nicht richtig geordnet.Ordnung durch mehr als eine Spalte mit mysql

EDIT

Eigentlich zusammen mit mehr Favoriten auf den ersten Positionen sein, und auch Elite-Kunden haben mehr Priorität I benötigt, Premium-Datensätze müssen. Diese alle Werke bedingt

1) Weitere Favoriten auf den ersten

2) Aber Prämie

betrachtet wird kommen

3) wird Wenn basic 5 Favoriten haben, es nach oben schieben werde nicht, Grund mit kleinen Neben Priorität

4) Elite haben einige gute Priorität

SELECT 
    `Driver`.`id` , 
    `Driver`.`login_id` , 
    `Login`.`profile_type`, 
    ................. 
ORDER BY `fav_count`, 
    FIELD( `Login`.`profile_type` , "premium", "basic") , 
    `Driver`.`is_elite` ASC 

Probe r ich erwartete

is_elite|  profile_type | fav_count 
________|_____________________|____________ 
1  |  premium  | 4  
1  |  premium  | 3 
1  |  premium  | 2 
1  |  premium  | 1 
0  |  basic  | 5 
0  |  basic  | 0 

Bitte beraten Sie mich. Dank

+1

Bitte stellen Sie Ihre Frage lesbarer. – Starx

+0

Was ist das Problem? – safarov

+0

und wo die Bearbeitung? =) –

Antwort

3

Wenn Sie die Ausgabe, die Sie aufgelistet wollen, müssen Sie durch die Werte in der Reihenfolge neu zu ordnen:

ORDER BY `Driver`.`is_elite` DESC, FIELD( `Login`.`profile_type` , "premium", "basic") DESC, `fav_count` DESC 

Hinweis: Sie müssen auch haben absteigend (DESC) auf alle Ihre Sortierspalten . Jeder von ihnen wird vom größten zum kleinsten sortiert.

+0

Übrigens gehe ich davon aus, dass "is_elite" sortseitig mehr Vorrang hat als "profile_type". Wenn das nicht stimmt, geben Sie "profile_type" zuerst in der ORDER BY-Liste und "is_elite" als zweite ein. – JerseyMike

+0

Alle 3 sind verwandt Ich habe meine Frage bearbeitet –

+0

@duke, hier ist, wie Sie Ihre ORDER BY ... # 1: Wählen Sie das Feld, das am wichtigsten ist (sortieren-weise) und fügen Sie es der Liste hinzu. # 2: Wenn es zuerst mit den größten Werten sortiert werden soll, fügen Sie "DESC" hinzu. # 3: Gehen Sie zurück zu # 1, bis Sie keine Spalten mehr haben. Wenn Sie diesen Regeln folgen, sollten Sie bekommen, was Sie wollen. – JerseyMike

1

Sprechen Sie die ORDER BY etwas wie folgt aus:

ORDER BY `table`.`is_elite`, `table`.`profile_type`, `table`.`fav_count` DESC 

Diese in der Art und Weise bestellen, die Sie erwarten (soweit ich aus dem Code sehen können, die Sie gegeben haben).

0

Aus dem Probenergebnis erwartet Sie es aussieht wie du benutzen wollte:

ORDER BY FIELD( `Login`.`profile_type` , "premium", "basic"), `fav_count` DESC, `Driver`.`is_elite` ASC 

Aber das ist spekulativ bestenfalls, Ihre Frage nicht sehr gut formuliert wurde.

3

nicht sicher von Ihrer Frage, aber das gibt die Reihenfolge, die Sie im Beispiel zeigen.

order by profile_type desc, fav_count desc 
Verwandte Themen