mysql – 如何根据字段中的字符串位置优先选择LIKE查询?
作者:互联网
我试图在表中查询有限的结果集,以便在javascript中填充自动完成字段.因此,我使用LIKE运算符输入了部分字符串.
例如,如果我有一个表,例如:
tblPlaces
id country
1 Balanca
2 Cameroon
3 Canada
4 Cape Verde
5 Denmark
为了这个例子,让我们说我想要返回两行 – 是的,对于这个例子,我在那里组建了一个国家;)我想优先考虑在国家开头匹配部分字符串的任何实例.我开始使用的查询是:
SELECT id, country FROM tblPlaces WHERE country LIKE 'ca%' LIMIT 2
这按预期返回“喀麦隆”和“加拿大”.但是,如果没有两个名称在一个单词的开头匹配字符串(例如’de’),我希望它在单词的其他地方查找.所以我修改了查询成为
SELECT id, country FROM tblPlaces WHERE country LIKE '%ca%' LIMIT 2
然后返回’佛得角’和’丹麦’,但这样做打破了我原来的’ca’搜索,现在返回’Balanca’和’喀麦隆’.
所以,我的问题是,如何使用单个查询来优先处理单词开头的匹配(也许我需要使用REGEXP?)我还假设如果’country’列被索引,这些比赛将至少以随后的字母顺序返回(即加拿大之前的喀麦隆等).
解决方法:
如果你的意思是优先考虑一开始正好的比赛……
SELECT id, country
FROM tblPlaces
WHERE country LIKE '%ca%'
ORDER BY CASE WHEN country LIKE 'ca%' THEN 0 ELSE 1 END, country
LIMIT 2
编辑
更通用,可能更快(假设“更接近开始’更好’匹配”)……
SELECT id, country
FROM tblPlaces
WHERE country LIKE '%ca%'
ORDER BY INSTR(country, 'ca'), country
LIMIT 2
标签:sql,mysql,sql-like 来源: https://codeday.me/bug/20191008/1870879.html