首页 > 解决方案 > 对于更复杂的 ORDER BY 语句,是否有用于 Swift 的 SQLite 方法?

问题描述

我有一个类似于以下的查询,我想在 sqlite 数据库上执行:

SELECT name 
FROM table 
WHERE name LIKE "%John%" 
ORDER BY (CASE WHEN name = "John" THEN 1 WHEN name LIKE "John%" THEN 2 ELSE 3 END),name LIMIT 10

我想使用 SQLite for Swift 将查询链接在一起,但我对如何(或者是否有可能)使用 .order 方法感到困惑。

let name = "John"
let filter = "%" + name + "%"
table.select(nameCOL).filter(nameCOL.like(filter)).order(nameCOL)

得到我

SELECT name
FROM table 
WHERE name LIKE %John% 
ORDER BY name

关于如何添加到查询以获得更高级的排序的任何想法,其中以 John 开头的名称首先出现,然后是其中包含 John 的名称?

我在这里看到了解决方案的 sqlite 部分:SQLite LIKE & ORDER BY Match query

现在我只想使用 SQlite for Swift 来实现它

鉴于有限的例子,似乎它可能过于严格,其他人有更复杂的 ORDER BY 子句的经验吗?

非常感谢。

标签: swiftsqlitesqlite.swift

解决方案


Sqlite.swift 可以用两个 .order 语句非常干净地处理这个问题:

let name = "John"
let filter = "%" + name + "%"
table.select(nameCol).filter(nameCol.like(filter))
.order(nameCol.like("\(name)%").desc
.order(nameCol)

.order 语句按照它们列出的顺序应用,第一个是主要的。

过滤器会将结果减少到仅包含“John”的结果。SQlite.swift 可以做很多复杂的事情。当我将 100 多个复杂查询移植到它时,我认为我需要大量原始 sql 查询,但我还没有使用原始 sql。


推荐阅读