我正在编写一些项目的索引,并且在索引完成后我对搜索功能有点困惑。我希望能够通过' name
'来搜索我的搜索结果。但是,我可能不知道确切的术语,因此需要部分结果。
例如,我的条目名称为" Item entry 1
"," Item entry 2
"," item 3
& #34;," something else
"," something else duplicate
"," item entry 1 dup
"。我想搜索"第1项重复"。
LIKE
语法对此没有多大帮助。我可以在搜索中的每个字符串后执行LIKE
语法,但是,结果不会是最好的。如果我使用" OR",我会得到" something else duplicate
"在" item 1 dup
"之上。如果我做了一个AND,我就什么都得不到。
我的解决方案是从代码中进行合并。对搜索词中的每个字符串执行LIKE
查询,存储结果,然后将它们合并在一起并按出现次数对其进行排序。但是,我想知道是否有一些东西可以直接从SQL查询中完成(并且更快)。
由于
答案 0 :(得分:1)
解决这个问题的简单方法是:
preg_split('/[^A-Za-z0-9]/')
array_unique
构造查询字符串,如:
select id, count(*)
from (
select id from table
where name like '%WORD1%'
union all
select id from table
where name like '%WORD2%'
...
)
group by id
order by 2 desc