2012-03-27 91 views
1

下面顯示的是我的查詢我需要排序這三列。這是爲了複雜的搜索列表。如果我使用其中之一,它可以很好地工作。但處理不止一個,它沒有正確地排序。通過mysql多個列排序

編輯

其實我需要的,溢價記錄必須在第一位置更最愛一起,也精英客戶有更多的優先權。 這些所有工作條件

1)更多收藏夾會在第一

2),但保費將被視爲

3)如果基本都會有5個最愛,它不會推到最高,基本爲小優先

4),以及精英有一些好的優先

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

試樣r我預計

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

請告訴我。由於

+1

請讓你的問題更具可讀性。 – Starx 2012-03-27 12:20:47

+0

是什麼問題? – safarov 2012-03-27 12:21:51

+0

和哪裏編輯? =) – 2012-03-27 12:22:55

回答

3

如果你想你所列出的輸出,需要重新排序的順序值BY:

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

注意:您還需要在所有排序的列已經降序(DESC) 。他們每個人都被排序從最大到最小。

+0

順便說一句,我假設「is_elite」比「profile_type」更具優先順序。如果不是這樣,請將「profile_type」先放在ORDER BY列表中,將「is_elite」放在第二個。 – JerseyMike 2012-03-27 12:30:58

+0

所有3個相關我編輯了我的問題 – 2012-03-27 12:38:54

+0

@duke,這裏是如何構建你的ORDER BY ...#1:選擇最重要的字段(排序方式)並將其添加到列表中。 #2:如果應該先將最大值排序,則添加「DESC」。 #3:回到#1,直到你不在列中。如果你遵循這些規則,你應該得到你想要的。 – JerseyMike 2012-03-27 13:33:01

1

充分利用ORDER BY是這樣的:

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

這將在您所期望的方式排序(據我可以從你給的代碼中看到的)。

0

從抽樣結果,你預期它看起來像你想使用:

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

但是,這是投機充其量,您的問題沒有措辭非常好。

3

不確定您的問題,但是這會給出您在示例中顯示的順序。

order by profile_type desc, fav_count desc