假设我有一张这样的桌子
表:businesses
+----+------------------------+
| id | name |
+----+------------------------+
| 1 | Carolyn Wong Cakes |
| 2 | Cupcakin Cackes Shop |
| 3 | Wong Cackes Shop |
| 4 | Indie Cakes & Pastries |
+----+------------------------+我想得到的best matched result,而我搜索一些词在名称内。例如,我想搜索:Wong Cackes Shop,它是3个单词。
我将此查询用于上面的搜索:
SELECT * FROM businesses WHERE (
name LIKE '% Wong %' OR
name LIKE '% Cackes %' OR
name LIKE '% Shop %'
)我希望record 3是第一个匹配的结果,但是结果是:
Carolyn Wong Cakes //与2匹配词Cupcaking Cackes Shop //与2匹配词Wong Cackes Shop //与3匹配词如何搜索单词并在其他结果之上获得最匹配结果的记录?
如下所示:
Wong Cackes Shop //与3匹配词Cupcaking Cackes ShopCarolyn Wong Cakes编辑:我的word-boundaries类方法也有问题。它不会得到以三个单词中的一个开头或结尾的结果。因为spaces在LIKE '% word %'
例如:
Wong[space] //不匹配
[space]Wong[space]匹配
[space]Wong //不匹配
谢谢。
发布于 2016-11-14 14:58:06
如下所示应能奏效
SELECT
name,
(( name LIKE '%Wong%')+( name LIKE '%Cackes%') +(name LIKE '%Shop%')) as total
FROM businesses WHERE (
name LIKE '%Wong%' OR
name LIKE '%Cackes%' OR
name LIKE '%Shop%'
)
ORDER BY total DESC您甚至可以在这里删除where子句,因为您只是对点击的总数感兴趣。
为了克服空格的问题,只需在类似的从句中消除它们。%wong%将匹配[space]wong或[space]wong[space]或wong[space]
发布于 2016-11-14 14:55:26
它做得很正确,因为它只会搜索单词。在您的示例中,应该搜索整个字符串Wong Cackes Shop (OR),最好是实现FULL TEXT搜索。
https://stackoverflow.com/questions/40591568
复制相似问题