我在PHP中有一个搜索页面,它使用以下查询从数据库中获取内容。
SELECT * FROM linkBase WHERE (`title` LIKE '%".$s."%') OR (`descr` LIKE '%".$s."%')
以下是我的数据库的样子:
id |title |descr
-----------------------------------------
1 |Hello World |This is a hello world description
2 |PiedPiper |The silicon valley company PiedPiper
3 |StackOverflow |Ask questions on programming
现在,例如,如果我使用$s = "silicon valley"
的值运行此查询,则它会获取row 2
。这可以。但是,如果用户将搜索字词输入为silicon PiedPiper
,该怎么办?它不会返回上述SQL查询的结果。如何修改查询,使其返回row 2
第二个搜索词。
问题总结: 如何使用PHP和SQL进行搜索查询,即使用户输入两个未在DB中相互放置的单词,也会返回结果
答案 0 :(得分:1)
如果你需要在搜索中支持单词的任意顺序,我建议使用REGEXP
MySQL函数,使用简单的"或"像
SELECT * FROM linkBase WHERE (`title` REGEXP 'silicon|PiedPiper') OR (`descr` REGEXP 'silicon|PiedPiper')
所以你可以用PHP替换空格并用管道符号(|
)替换它们,并且单词的顺序不再重要。
这将选择包含至少一个单词的所有行,如果需要匹配列表中的所有单词,则可能需要另一个正则表达式。
答案 1 :(得分:0)
LIKE'%{"。$ s。"}%'或者是旧学校INSTR(title
,' {'。$ s。'}')> 0