0

スペースで区切られた複数の単語を含むことができる検索取得変数があります。次のスクリプトを使用して、url 変数を取得しました。この例では、簡単にするために文字列を使用していることに注意してください。

私がやろうとしたことは、変数値を爆発させてから、前後に必要な sql を追加することです。

エコーは正常に動作します。次のコード内で sql の変数として必要なのは、このエコーです。

私の問題は、クエリ内の外部で文字列として参照すると、最後のクエリ メタルが返されることです。私はこれにとても慣れていないので、助けていただければ幸いです。

<?php

$string = "kitchens wooden metal";
$splitted = explode(" ",$string);
$cnt = count($splitted);
$i=0;
while($cnt > $i)
{
    $sqlsnippet = "cats_sub.cats_sub_ms_desc LIKE %$splitted[$i]%";
    $i++;

    echo $sqlsnippet;
}

?> 
4

2 に答える 2

0

私のコード:

<?php

$string = "kitchens wooden metal";
$splitted = explode(" ",$string);
$cnt = count($splitted);
$i=0;
while($cnt > $i)
{
$sqlsnippets[] = "cats_sub.cats_sub_ms_desc LIKE '%$splitted[$i]%'";
$i++;

}
$sqlsnippet = "(" . implode(" or ", $sqlsnippets) . ")";

echo $sqlsnippet;
?> 

結果:

(cats_sub.cats_sub_ms_desc LIKE '%kitchens%' or cats_sub.cats_sub_ms_desc LIKE '%wooden%' or cats_sub.cats_sub_ms_desc LIKE '%metal%')

最適化されたバージョン:

<?php

$string = "kitchens wooden metal";
$sqlsnippet = "(cats_sub.cats_sub_ms_desc LIKE '%" . preg_replace("/ /", "%' or cats_sub.cats_sub_ms_desc LIKE '%", $string) . "%')";
echo $sqlsnippet;

?> 
于 2011-12-12T09:42:19.363 に答える
0
$sqlsnippet = "cats_sub.cats_sub_ms_desc LIKE %$splitted[$i]%";

これ$sqlsnippetは -loop の反復ごとに上書きされますwhile。これが、最後の SQL スニペットのみを取得する理由です。

次のように、SQL スニペットを連結する必要があります。

$sqlsnippet = 'WHERE ';

foreach($i = 0; $i < count($splitted); $i++)
{
    // Append AND 
    if($i > 0)
    {
        $sqlsnippet .= ' AND ';
    }

    $sqlsnippet .= 'cats_sub.cats_sub_ms_desc LIKE %' . mysql_real_escape($splitted[$i]) . '%';
}

var_dump($sqlsnippet);
于 2011-12-12T09:42:28.287 に答える