【问题标题】:multiple keyword search script needs some expert input多个关键字搜索脚本需要一些专家输入
【发布时间】:2010-09-22 13:34:57
【问题描述】:

我一直在根据本教程编写关键字搜索脚本: 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

感谢您提供的任何帮助。

【问题讨论】:

  • 建议对帮助过您的人进行投票。 :-) IIRC,声誉限制不适用于您自己的问题。

标签: php mysql search keyword


【解决方案1】:

如果您要返回包含任何关键字的结果,请将所有 AND 替换为 OR

如果您这样做,那么您的数据库将检查表的任何列中是否存在任何关键字。

因此您的最终查询将由数据库服务器读取,如下所示:

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)的所有记录。

希望这会有所帮助。

【讨论】:

  • 谢谢。既然您指出了它,它就可以工作并且有意义。对于大多数尝试过该搜索教程的人来说,它仍然无法正常工作。我在 StackOverflow 上的第一个问题是成功的。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-20
    • 2011-10-18
    • 2022-01-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多