【问题标题】:How do I place all 'favorites = 1' on top in a sql query and sort return by a specific column?如何将所有 'favorites = 1' 放在 sql 查询的顶部并按特定列对返回进行排序?
【发布时间】:2019-06-13 08:53:05
【问题描述】:

我正在尝试为我的 Android 应用程序中使用的 SQLite db 找到正确的查询。我有一个包含 Notes 的数据库,其中包含标题、文本、isFavorite、isTrash、creationEpoch、modifiedEpoch 等字段。我想要做的是例如通过 modifiedEpoch ASC/DESC 对数据库查询进行排序,但将所有收藏的行放在顶部。

我在 stackoverflow 上查看了几个类似的问题,但无法正常工作。

这是我迄今为止尝试过的一个示例:

SELECT *
FROM note
WHERE trash = 0
ORDER BY CASE modified_epoch WHEN favorite = 1 THEN 0 ELSE 1 END DESC,
         favorite DESC

其中将收藏夹放在首位但未按 modifiedEpoch 排序,而非收藏夹似乎按 ASC 顺序排序。

【问题讨论】:

    标签: android sql sqlite


    【解决方案1】:

    您需要两个排序标准:

    • 第一个基于 isFavorite 的排序
    • 然后在 modifiedEpoch 上

    假设 isFavorite 可以是 0 或 1,这应该可以:

    ORDER BY isFavorite DESC
           , modifiedEpoch DESC
    

    这将所有收藏放在首位,最近的收藏放在最前面,然后是非收藏,再次从最近的收藏开始(由于 modifiedEpoch 上的 DESC)。

    【讨论】:

    • 感谢您的回复,当我将它与 ASC 一起使用时,它会将收藏夹放在底部。我不想总是在顶部显示收藏夹。
    • @zet 您有两个独立的 ASC/DESC 规范。要始终将最爱放在首位,只需将 DESC 放在 isFavorite 列上即可。
    【解决方案2】:

    试试

    SELECT * 
    FROM note 
    WHERE trash = 0 
    ORDER BY CASE WHEN favorite = 1 THEN 0 ELSE 1 END, modified_epoch DESC
    

    favorite = 1 先按 modified_epoch 排序,其余的 favourite = 0, 2, ... 按照 modified_epoch 排序

    【讨论】:

    • 感谢您的回复,这对我来说非常适合!即使我使用 ASC,收藏夹仍保持在首位。
    • @zet 是的,ASC 是默认的
    猜你喜欢
    • 2014-02-04
    • 2019-06-15
    • 2022-11-17
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-27
    相关资源
    最近更新 更多