SQL 对名称进行排序,收藏夹位于顶部

问题描述 投票:0回答:1

我有一个带有排序过滤器的列表。根据参数,我希望它在顶部显示该参数的收藏夹,同时保持它们按名称排序(如果值相同):

示例 1:从 A-Z 订购

  1. 艾丽莎(*)
  2. 弗兰克(*)
  3. 杰西卡(*)
  4. 安娜
  5. 鲍勃
  6. 杰克
  7. 扎克

示例 2:从最后一张发票开始的订单

  1. 杰西卡(*)/2024
  2. 艾莉莎(*)/2023
  3. 弗兰克(*)/2021
  4. 杰克/2024
  5. 扎克/2024
  6. 安娜/2023
  7. 鲍勃/2023

我试过了

    `ORDER BY 
             favorite ${sortDirection}, name ${sortDirection}`

还有

`ORDER BY 
        favorite DESC,
        CASE WHEN favorite = 1 THEN ${orderBy} END ${sortDirection},
        CASE WHEN favorite = 1 THEN name END ASC,
        CASE WHEN favorite = 0 THEN ${orderBy} END ${sortDirection},
        CASE WHEN favorite = 0 THEN name END ASC
    `;

${sortDirection}
可以是 ASC 或 DESC。但在这种情况下,收藏夹按从 true 到 false 的顺序显示,并且它们不会按名称从 A 到 Z 排序,但它们的顺序与数据库行中的顺序相同。

javascript sql sqlite better-sqlite3
1个回答
0
投票

对于第一个例子,我认为你想要类似的东西:

SELECT *
FROM yourTable
ORDER BY
    CASE WHEN name LIKE 'Alissa%' OR name LIKE 'Frank%' OR name LIKE 'Jessica%'
         THEN 1 ELSE 2 END,
    name;
© www.soinside.com 2019 - 2024. All rights reserved.