【问题标题】:Searching for the word "google yahoo" in my database在我的数据库中搜索“google yahoo”这个词
【发布时间】:2013-10-28 00:43:30
【问题描述】:

我想搜索我的数据库,例如“google yahoo”这个词,当我输入它时,我应该能够查看包含 google 和 yahoo 的行。除了雅虎之外,它不需要与谷歌处于相同的顺序。不管它在哪里,给我一个简单的逻辑。我可以查询那个东西,比如select * from table where column like("%google%yahoo%")。我想用 PHP 开发这个东西,但是如何插入 %.我是否需要使用if 语句,以便在找到空格时可以在单词之间插入 %,或者是否有任何其他逻辑可以使其更简单?

【问题讨论】:

  • 这对 StackOverflow 来说不是一个好问题。

标签: php search


【解决方案1】:

如果要检查一个字符串是否包含另一个字符串,可以使用stristr。这可能如下所示

// for fixed strings
if ( stristr($text, 'google') !== FALSE && stristr($text, 'yahoo') !== FALSE)
    // both found

// for dynamic amount of strings
$searchfor = array('google','yahoo');
foreach ($searchfor as $needle) {
    if (stristr($text, $needle) === FALSE) {
        // $needle not found
    } else {
        // $needle found
    }
}

另一种可能性是使用preg_match。你应该首先确定你到底想做什么,然后决定你想使用哪种方法。

【讨论】:

  • 因为它是针对搜索引擎的,所以我的搜索查询将始终不同,并且查询中的字数也不同(不完全是 2,它可以超过 2)。在这种情况下,我如何可以做到?我是否需要在 if 条件之前进行 while 循环,以便它循环到字符串结尾
  • 请看我的编辑。但请注意,搜索可能非常昂贵(就执行时间而言)。有多种搜索方法,如果时间很重要并且您不只是在玩,请阅读这些方法并尝试找到最适合您需求的方法
【解决方案2】:

所以据我了解,您希望某列的值是 google 或 yahoo(或提供的任何字词)的行

查询

SELECT * FROM tablename WHERE columnname LIKE "%google%" AND columnname LIKE "%yahoo%"

(如果您对其中任何一个都满意,请将AND 替换为OR

PHP

基本上你的PHP代码应该split空格上的给定输入,从而获得一个单词数组。

接下来,当您构建查询时,对于 每个 单词,它应该附加以下子句:

columnname LIKE "%word%"

(您可能希望从搜索中过滤掉常用词,例如 a、in、of 等)

【讨论】:

  • 你的意思是我需要在单词的前面和后面包含 % 以便 %word% 可以检查任何有单词的东西。我有这个想法,我不知道建议做多远。由于我只处理小型数据库,我认为这不会是一个问题。另一件事是,每当用户在搜索查询中键入句子或单词时,我都想搜索每个单词(考虑到每个单词都有索引和独立搜索)。您对此有何看法?考虑每个单词的索引或通过添加 % 过滤每个单词,哪个更好。
  • 我对你的数据库还不是很清楚,所以我真的不能说。我假设您正在搜索表格的某个文本列中的单词。但是你说单词被索引了?做详细说明。
  • 例如,在我的描述栏中,我有这样的句子“我是个好孩子”。每当用户试图通过键入“am boy”来找到这句话时。在这种情况下,用户应该得到我在引号中写的那句话。每当我们在查询中写这个时,它就像“%am%boy%”。我在一些文章中看到他们用索引编写了搜索。这里的索引只是数组中的单词。(例如:i[0]="am" i[1]="boy")在这种情况下,我可以搜索每个单词的结果,这就像 OR 逻辑一样。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-10
  • 1970-01-01
  • 2016-10-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多