我有以下脚本
select c.id
from ".TBL_COUPONS." as c
inner join ".TBL_BUSINESS." as b
on c.business_id = b.business_id
inner join ".TBL_BLOCATION." as l
on c.business_id = l.business_id
where
(match(c.name) against ('$search')
or
match (b.name,b.category,b.subcat) against ('$search'))
and l.zip = '$zip'
为什么这只会返回完全匹配?例如,如果i $搜索锁匠什么都没有出现。 但如果我搜索锁匠,我会得到两个结果。 (两个搜索都包括$ zip ='75061')
答案 0 :(得分:2)
一种方法是用外卡替换最后几个字符并在布尔模式下执行MATCH()AGAINST
搜索词“locksmith”应该在php中改为“locksmith *”,你的代码就是这样的
match(c.name) against ('$search' IN BOOLEAN MODE)
出于一般目的,您应该从原始搜索字词中的字词中删除“s”,“ed”,“ing”等,并将外卡*添加到结尾。
答案 1 :(得分:0)
您的桌子是否可以使用fulltext restrictions?
答案 2 :(得分:0)
这就是全文匹配的工作原理。它不知道复数并且匹配整个单词。这个问题不时出现。偶尔当你看到生成的建议“你的意思是......”时,这是一个试图解决这个问题的页面。