数据库
首页 > 数据库> > mysql – 如何根据字段中的字符串位置优先选择LIKE查询?

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