PHP SQL搜索查询匹配

时间:2017-08-21 09:55:32

标签: php sql mysqli

我在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中相互放置的单词,也会返回结果

2 个答案:

答案 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