SQLite 3.7.11
鉴于我在SQLITE表中有这两个记录,其字段名为name
:
“预览”
“查看”
如果我运行查询:
SELECT * FROM table WHERE name LIKE "%" + $keyword + "%" ORDER BY name
将$ keyword设置为“ vi ”
我会按此顺序得到结果:
1)“预览”
2)“查看”
有没有办法订购,以便第一个字母与关键字的第一个字母相同的名称(在本例中为“v”)会先出现?
答案 0 :(得分:2)
您可以按搜索字符串中关键字的位置进行排序
SELECT * FROM your_table
WHERE name LIKE concat('%', '$keyword', '%')
ORDER BY POSITION('$keyword' IN name)
name
答案 1 :(得分:1)
不确定是否可以做得更简洁,但这应该有效。我使用?
作为变量的占位符。您发布的查询似乎不是正确的SQL。
SELECT * FROM table1
WHERE name LIKE '%' || ? || '%'
ORDER BY (CASE WHEN SUBSTR(Name,1,1) = SUBSTR(?,1,1) THEN 0 ELSE 1 END),
name