【问题标题】:Order by more than one column with mysql用mysql按多列排序
【发布时间】:2023-04-11 09:13:01
【问题描述】:

下面显示的是我需要用这三列order by 的查询。这适用于复杂的搜索列表。如果我使用其中之一,它会完美运行。但处理多个时,无法正确排序。

编辑

其实我需要的是,优质唱片必须排在第一位,并且有更多的收藏夹,而且精英客户有更多的优先权。 这些都是有条件的

1) 首先会有更多的收藏夹

2) 但会考虑保费

3) 如果basic有5个收藏,它不会推到顶部,basic优先级小

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

请给我建议。谢谢

【问题讨论】:

  • 请让您的问题更具可读性。
  • 大家好,我已经编辑了我的问题
  • 我可以看到至少 10 种不同的排序,它们的结果与您的样品相同。请澄清更多数据,在profile_type 和/或is_elite 列中具有相同/不同的数据。
  • 再次编辑问题,请阅读所有 3 个链接在一起
  • 让我问几个问题来帮助澄清...高级配置文件总是精英吗?如果不是,请在您的示例中添加一行,说明在不是这种情况下的排序。其次,“fav_count”实际上是计数还是排名?我不确定这是否重要,因为“fav_count”似乎是您最不重要的排序列。

标签: php mysql


【解决方案1】:

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

order by profile_type desc, fav_count desc

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 顺便说一句,我假设“is_elite”的优先级高于“profile_type”,排序方式。如果不是这样,请将“profile_type”放在 ORDER BY 列表的第一位,然后将“is_elite”放在第二位。
    • @duke,这里是如何构建您的 ORDER BY... #1:选择最重要的字段(排序方式)并将其添加到列表中。 #2:如果应该先按最大值排序,请添加“DESC”。 #3:回到#1,直到你排错列。如果你遵守这些规则,你应该得到你想要的。
    【解决方案3】:

    按以下方式订购:

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

    这将以您期望的方式排序(据我从您提供的代码中可以看出)。

    【讨论】:

      【解决方案4】:

      从您预期的示例结果看来,您想要使用:

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

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

      【讨论】:

        猜你喜欢
        • 2018-03-12
        • 1970-01-01
        • 2018-03-14
        • 1970-01-01
        • 2012-09-13
        • 2016-05-12
        • 2016-07-19
        • 2012-05-31
        • 1970-01-01
        相关资源
        最近更新 更多