我需要一个仅使用 LIKE 搜索 1 个字段的 SQLite 查询。
基本示例:
SELECT name FROM table WHERE name LIKE "%John%" ORDER BY name LIMIT 10;
问题是我希望以这种方式对结果进行排序:
- 如果字段相等(例如“John”)
- 如果字段以“John”开头(例如“John Doe”)
- 如果该字段包含“John”(例如“Jane John Doe”)
以下查询达到了预期的结果,但速度很慢:
SELECT name FROM table WHERE name LIKE "%John%" ORDER BY CASE WHEN name = "John"
THEN 1 ELSE 2 END, CASE WHEN name LIKE "John%" THEN 1 ELSE 2 END, name LIMIT 10;
上面的查询比使用 3 个单独的查询(一个用于完全匹配,一个用于开头,一个用于包含)的替代方法要慢(或者我测试它不正确)。
还有其他选择吗?