我一直在根据本教程编写关键字搜索脚本: http://www.hackosis.com/2007/11/06/howto-simple-search-engine-with-php-and-mysql/
与提及的一些评论者一样,脚本最终只会根据搜索字词中的最后一个字返回结果。所以我也试图实现其他用户的一个建议,但现在我似乎只能根据第一个搜索词得到结果。
我的脚本代码可以在这里找到:http://php.pastebin.com/m7759afd3
我的print_r结果如下:
SELECT * FROM blog WHERE blog_title LIKE '%barry%' OR blog_content LIKE '%barry%' AND blog_title LIKE '%child%' OR blog_content LIKE '%child%' AND blog_title LIKE '%help%' OR blog_content LIKE '%help%' ORDER BY blog_title
SELECT * FROM links WHERE link_title LIKE '%barry%' OR link_desc LIKE '%barry%' AND link_title LIKE '%child%' OR link_desc LIKE '%child%' AND link_title LIKE '%help%' OR link_desc LIKE '%help%' ORDER BY link_title
SELECT * FROM pages WHERE page_title LIKE '%barry%' OR page_content LIKE '%barry%' AND page_title LIKE '%child%' OR page_content LIKE '%child%' AND page_title LIKE '%help%' OR page_content LIKE '%help%' ORDER BY page_title
感谢您提供任何帮助。
答案 0 :(得分:3)
如果您想要返回包含任意关键字的结果,请将所有 AND 替换为 OR 。
如果您这样做,那么您的数据库将检查表中任何列中是否存在任何关键字。
因此,您的最终查询将由DB服务器读取,如下所示:
SELECT * FROM blog WHERE blog_title LIKE '%barry%' OR blog_content LIKE '%barry%' OR blog_title LIKE '%child%' OR blog_content LIKE '%child%' OR blog_title LIKE '%help%' OR blog_content LIKE '%help%' ORDER BY blog_title
并且应该在任何列(blog_title, blog_content
)中返回所有包含关键字(barry,child,help)的记录。
希望这有帮助。
答案 1 :(得分:1)
AND运算符的优先级高于OR,因此如果要返回包含所有关键字的结果,则需要添加括号,如下所示:
SELECT * FROM blog
WHERE (blog_title LIKE '%barry%' OR blog_content LIKE '%barry%')
AND (blog_title LIKE '%child%' OR blog_content LIKE '%child%')
AND (blog_title LIKE '%help%' OR blog_content LIKE '%help%')
ORDER BY blog_title