【问题标题】:Trying to do a php/mysql search and need to break string into array and search尝试进行 php/mysql 搜索,需要将字符串分解为数组并搜索
【发布时间】:2012-05-09 04:43:32
【问题描述】:

我的用户将搜索词放在输入字段中。我正在使用的脚本将其存储在 $find 变量中。然后它像这样搜索mysql:

"select * from mytable WHERE title LIKE '%$find%' or description LIKE '%$find%'";

我希望能够提取结果,即使标题中有 1 个单词,描述中有另一个单词,但目前还没有。所以.. 我猜我需要将 $find 变量分解成一个带有函数的数组。之后,我将如何在 mysql 中进行搜索?由于我永远不知道搜索中有多少单词(他们可能决定一次搜索 8 个单词),我如何在 mysql 查询中引用数组?

提前谢谢!

【问题讨论】:

  • 如果$find 是一个长字符串(即多个单词),则查询只会找到与字符串完全相同的结果。您需要将单词分开并将每个单词附加到查询中,或者使用 MySQL 全文搜索功能。

标签: php mysql arrays search


【解决方案1】:

您应该使用 FULLTEXT 索引并在其上构建适当的boolean search query

没有它你可以达到你想要的效果,但与使用 FULLTEXT 索引相比,这会很慢。您必须使用explode 来获取单词列表,然后构建WHERE 条件,如concat(title, description) LIKE '%word1%' AND concat(title, description) LIKE '%word2%' 等。

(在我的第一个答案中,我说没有 FULLTEXT 就不可能实现这种效果。我错了,编辑了这个答案。)

【讨论】:

  • 一方面让我感到惊讶..我想我可以用 str_split 或其他东西把它搞砸,然后参考搜索结果,但是..如果那不可行,没什么大不了的。至于全文索引..谢谢!我不知道,只是谷歌它,这正是我正在寻找的解决方案。看起来很容易创建。非常感谢!
  • 我同意FULLTEXT 是要走的路,但并不是所有可能的排列都需要包括在内。可以只做WHERE title LIKE '%word1%' AND title LIKE '%word2%' ... AND title LIKE '%wordn%'。使用 explode/implode 从 php 构建非常简单。
  • @bfavaretto - 你说得对,时间对我来说太晚了!但是还有一条评论:您必须使用concat(title, description) like '%word1%' 等(因为要检查多列)。我将编辑我的答案。
猜你喜欢
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-03-31
  • 2020-05-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多