使用mysql按多个列排序

时间:2012-03-27 12:18:21

标签: php 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

我预期的示例结果

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

请告诉我。感谢

4 个答案:

答案 0 :(得分:4)

如果您想要列出的输出,则需要重新排序ORDER BY中的值:

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

注意:您还需要在所有排序列上进行降序(DESC)。它们中的每一个都被从大到小排序。

答案 1 :(得分:3)

不确定您的问题,但这会给出您在示例中显示的顺序。

order by profile_type desc, fav_count desc

答案 2 :(得分:1)

按以下方式进行ORDER BY:

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

这将以您期望的方式排序(据我所知,您可以看到)。

答案 3 :(得分:0)

从您希望使用的示例结果中看起来:

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

但这充其量只是猜测,你的问题措辞不是很好。