swift - 对于更复杂的 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 子句的经验吗?
非常感谢。
解决方案
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。
推荐阅读
- angular - 如何隐藏环境变量角度2
- java - 有没有办法在单击 java 中的按钮时将 .xlsx 文件转换为 .xls 文件并将 .docx 文件转换为 .doc 文件?
- python - 如何在 mysql 数据库中使用数据匿名化
- css - 我需要我的表格中的图像遵循一些高度和宽度规则
- php - 如何将加密的密码 PHP 调用到 Android Mysql
- javascript - 停止位置:固定 div 在某个点(在页脚开始之前)
- dart - 符号文件太多
- amazon-web-services - S3 服务器访问日志与 CloudTrail 日志
- gulp - Gulp callbacks for zipping
- android - Android Studio 无法识别 appcompat 或任何其他默认项