Существует ли метод SQLite для Swift для более сложных операторов ORDER BY? - PullRequest
0 голосов
/ 01 февраля 2020

У меня есть запрос, подобный следующему, который я хотел бы выполнить в базе данных 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 для 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

Любые идеи о том, как добавить в запрос, чтобы получить более продвинутую сортировку, где имена, начинающиеся с Джона, идут первыми, а затем имена с Джоном в их?

Я видел sqlite часть решения здесь: SQLite LIKE & ORDER BY Запрос на совпадение

Теперь я просто хотел бы реализовать его с помощью SQlite для Swift

Кажется, это может быть слишком ограничительным, учитывая ограниченные примеры, кто-нибудь еще имеет опыт работы с более сложными предложениями ORDER BY?

Большое спасибо.

1 Ответ

0 голосов
/ 17 марта 2020

Sqlite.swift может довольно легко справиться с этим с помощью двух операторов .order:

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

. Операторы .order применяются в том порядке, в котором они перечислены, первый из которых является первичным.

Фильтр уменьшит результаты только до тех, в которых есть «Джон». SQlite.swift может делать много сложных вещей. Я думал, что мне понадобится большое количество необработанных sql запросов, когда я перенес на него сотни сложных запросов, но мне еще предстоит использовать raw sql.

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...