【问题标题】:MySQL search string begins with string first, but also return any results that contain stringMySQL 搜索字符串首先以字符串开头,但也返回任何包含字符串的结果
【发布时间】:2014-10-15 15:24:16
【问题描述】:
我想在列中搜索一个值,并首先返回以搜索开头的值,然后返回包含它的任何值。
例如:
搜索:约翰
约翰·多伊
约翰库克
强尼苹果籽
比尔·约翰逊
特德约翰逊
约翰逊一家
现在最简单的方法似乎是查询“WHERE Name LIKE 'john%'”,然后再次查询 WHERE Name LIKE '%john%',然后合并结果。不过,似乎有一种方法可以在一个查询中执行此操作。有什么帮助吗?
【问题讨论】:
标签:
mysql
string
search
wildcard
【解决方案1】:
为什么不在你的字符串两边使用一个简单的通配符,而是从你提供的字符串开始排序你的结果
select * from t where col like '%john%' order by col like 'john%' desc
order by col like 'john%' desc 将返回布尔值 0/1,因此以 john 开头的记录将首先显示,然后将返回其他匹配的记录
【解决方案2】:
你可以像这样做一个有条件的订单
SELECT *
FROM table
WHERE Name LIKE '%john%'
ORDER BY
CASE WHEN Name LIKE "john%" THEN 1
WHEN Name LIKE "%john%" THEN 2
WHEN Name LIKE "%john" THEN 3 -- # -- you can add more conditions like so
ELSE 4
END
DEMO