php/mysql计算关键字限制的搜索词和结果

php/mysql计算关键字限制的搜索词和结果,php,mysql,search,count,Php,Mysql,Search,Count,我有以下PHP搜索脚本。 当我搜索1234567时,它与确切的短语匹配,但我希望它只匹配首4个字符,即1234 说明: 我想让它计算最初的4个字符,并显示匹配这些初始字符的结果。例如,如果有人搜索1234567,则脚本应计算初始4个字符,即1234,并显示结果。类似地,如果有人搜索456789,则脚本应计算初始4个字符,即4567,并显示结果 ///explode search term $search_exploded = explode(" ",$search);

我有以下PHP搜索脚本。
当我搜索
1234567
时,它与确切的短语匹配,但我希望它只匹配首4个字符,即
1234

说明:

我想让它计算最初的4个字符,并显示匹配这些初始字符的结果。例如,如果有人搜索
1234567
,则脚本应计算初始4个字符,即
1234
,并显示结果。类似地,如果有人搜索
456789
,则脚本应计算初始4个字符,即
4567
,并显示结果

///explode search term
           $search_exploded = explode(" ",$search);
           foreach($search_exploded as  $search_each)
           {
           //construct query

            $x++;
            if ($x==1)
               $construct .= "keywords LIKE '%$search_each%'";
           else
              $construct .= " OR keywords LIKE '%$search_each%'";

           }


     //echo out construct

    $construct = "SELECT * FROM numbers WHERE $construct";
     $run = mysql_query($construct);

     $foundnum = mysql_num_rows($run);

     if ($foundnum==0)
        echo "No results found.";
     {

       echo "$foundnum results found.<p><hr size='1'>";

       while ($runrows = mysql_fetch_assoc($run))
       {
        //get data
        $title = $runrows['title']; 
        $desc = $runrows['description'];
       $url = $runrows['url'];

        echo "<b>$title</b>
             <b>$desc</b>
       <a href='$url'>$url</a><p>";
///分解搜索词
$search\u exploded=explode(“,$search”);
foreach($search\u分解为$search\u)
{
//构造查询
$x++;
如果($x==1)
$construct.=“像“%$search\u each%”这样的关键字”;
其他的
$construct.=”或“%$search\u each%”等关键字;
}
//回声输出结构
$construct=“从数字中选择*,其中$construct”;
$run=mysql\u查询($construct);
$foundnum=mysql\u num\u行($run);
如果($foundnum==0)
echo“未找到任何结果。”;
{
echo“$foundnum结果已找到。
”; 而($runrows=mysql\u fetch\u assoc($run)) { //获取数据 $title=$runrows['title']; $desc=$runrows['description']; $url=$runrows['url']; 回声“$标题 $desc “;
要将现有代码修改为仅使用前4个字,只需稍微更改一下循环:

改变这个-

foreach($search_exploded as $search_each) {
对此-

for($i = 0; $i < min(count($search_exploded), 4); ++$i) {
    $search_each = $search_exploded[$i];
for($i=0;$i
将以下代码添加到
foreach
循环的顶部:

if(strlen($search_each) > 4) $search_each = substr($search_each, 0, 4);

像这样:

$search_exploded = explode(" ", $search);
foreach($search_exploded as $search_each)
{
    if(strlen($search_each) > 4) $search_each = substr($search_each, 0, 4);
    // your code
}

如果每个单词的长度超过4个,此代码将搜索该单词的前4个字符。

您可以将您的
foreach
替换为:

foreach($search_exploded as $search_each)
{
    $str = mysql_real_escape_string(substr($search_each, 0, 4));
    //construct query
    $x++;
    if ($x==1) $construct .= "keywords LIKE '$str%'";
    else       $construct .= " OR keywords LIKE '$str%'";
}

脚本有什么问题?它没有搜索任何错误吗?请不要对新代码使用
mysql.*
函数。它们不再被维护,社区已经开始运行。请参阅?相反,您应该了解并使用or。如果您不能决定,将帮助选择。如果您愿意学习,。您的代码将搜索前4个单词。我想他想搜索每个单词中的每4个字符。@NikolaK。-这是可能的,但他确实说出了前4个关键字。在他的代码中,他引用
关键字
作为搜索字符串中按空格分隔的元素,所以我认为他更可能是指单词。你知道这个问题吗?我试过了但它不起作用。看这里-,我在数据库中已经有了值0345319,当我搜索0345319时,它给出了结果,但当我最后添加0或1时,比如03453190或03453191,它给出了结果未找到的错误。你对这个问题有什么想法吗?你也可以研究一下这个问题吗?