如果搜索包含字符串

时间:2014-02-21 17:48:00

标签: php mysql

几年前我一直在使用这个小模板

// get the q parameter from URL
$q = $_REQUEST["q"];
$hint = "";
session_start();
require ('connect.php');
$get_qst = mysql_query("SELECT question FROM questions WHERE question LIKE '%$q%'") or die(mysql_error());
if (mysql_num_rows($get_qst) >= 1) {
    while ($qst = mysql_fetch_array($get_qst)) {
        $a[] = $qst['question'];
    }
}
else {
    $a[] = "";
}
// Fill up array with names

// lookup all hints from array if $q is different from ""
if ($q !== "") {
    $q = strtolower($q);
    $len = strlen($q);
    foreach ($a as $name) {
        if (stristr($q, substr($name, 0, $len))) {
            if ($hint === "") {
                $hint = $name;
            }
            else {
                $hint .= "<br /> $name";
            }
        }
    }
}
// Output "no suggestion" if no hint were found
// or output the correct values

echo $hint === "" ? 'No questions found, <a href="javascript:void(0);" id="btn_askqst" onclick="$(\'#qst\').val($(\'#search_qst\').val());">ask question?</a>' : $hint;

代码的作用是将输入字段与数据库中的行进行比较。问题是,例如,我在我的数据库中有一个问题,“你更喜欢PHP或ASP?”有人搜索“PHP或ASP?”它会说没有问题。这样做的原因是它不检查单个单词,它只检查句子的开头。因此,对于我来说,我需要以正确的顺序写出每个单词,尽管我不需要写出整个问题。

我该如何检测这个词是否在问题中?

我很抱歉不好解释。英语不是我的第一语言,我真的不知道怎么解释这个。

1 个答案:

答案 0 :(得分:0)

首先,您需要在空格处打破输入字符串:

$q  = "PHP or ASP";
$terms = explode(" ", $q);

然后,您需要为每个单词执行搜索查询。

foreach ($terms as $term) {
    $get_qst = mysql_query("SELECT question FROM questions WHERE question LIKE '%$term%'") or die(mysql_error());
    if (mysql_num_rows($get_qst) >= 1) {
        while ($qst = mysql_fetch_array($get_qst)) {
            $a[] = $qst['question'];
        }
    }
    else {
        $a[] = "";
    }
}

最后,这很重要,重新编写此代码以停止使用mysql_函数。请参阅@ h2ooooooo

上面的评论