我正在我的网站上构建搜索,我注意到当您在搜索中输入多个单词时它不起作用。这是查询的要点:
SELECT * FROM `blog` WHERE `content` LIKE '%$keyword%' OR `title` LIKE '%$keyword%' ORDER BY `id` DESC
奇怪的是,当我在 phpMyAdmin 中测试查询时,它返回了预期的结果。然而,在我的网站上,没有找到任何结果。
我尝试用 %s 替换关键字中的空格,但这并没有改变任何东西。
问题是LIKE
模式匹配而不是实际搜索关键字。您应该在数据库列上创建全文索引并使用WHERE MATCH keywords AGAINST column
. 这将以任何顺序正确搜索所有关键字,并且无论如何都会更快。
我刚刚在我的数据库中尝试过,在查询中使用的速度是使用全文索引LIKE
的 66 倍以上。MATCH
我正在使用两个相互“连接”的表。一种是标签,另一种是产品。
所以我所做的就是在标签表中的标签列中添加了一个全文索引,并针对该列执行了匹配。查询然后加入产品,然后吐出一些关于该项目的数据。大约 4 秒,大约 3000 个产品和大约 3000 个标签。
然后我先用空格分解搜索字符串,然后用%' OR tags.tag LIKE '%
. 对于相同数量的产品和标签,这需要大约 0.06 秒。