2017-11-27 11 views
1

私はここで新しいです。私はPHPでコーディングを始め、MySQLを使い始めました。
複数の「キーワード」を検索したいとします。たとえば、「Intel i7 7700k」のようなテーブルでは、これをどのように達成するかわかりません。私のMySQLの表の検索機能を改善するにはどうすればよいですか? PHP + MySQL

私の構造は次のようになります。
id | brand | family | model | cores | threadsなど
1 | Intel | i7 | 7700k | 4 | 8など

次のPHP検索は動作しますが、1つの単語だけのために。

if(isset($_GET['search'])){ 
    $search = $conn->escape_string($_GET['search']); 

    $query = $conn->query(" 
    SELECT brand, family, model 
    FROM cpus 
    WHERE brand LIKE '%{$search}%' 
    OR family LIKE '%{$search}%' 
    OR model LIKE '%{$search}%' 
    "); 

私は単語の配列をループしようとしましたが、動作しません。

if(isset($_GET['search'])){ 
    $search = $conn->escape_string($_GET['search']); 
    $words = explode(' ',$search); 
    $searchout = foreach ($words as $word){ 
    "SELECT brand, family, model FROM cpus WHERE brand LIKE '%$word%' OR family LIKE '%$word%' OR model LIKE '%$word%'" 
    } 
    $query = $conn->query($search_out); 

    echo "<div class='result-count'>Found " . $query->num_rows . " results.</div>"; 

    if($query->num_rows){ 
     while($r = $query->fetch_object()){ 

     echo "<div class='result'><a href='#'>" . $r->brand . $r->model . "</a></div>"; 
     } 
    } 
} 

検索を複数の単語に対応させるにはどうすればよいですか?私はゆっくりと4日、PHPとMySQLを嫌う、それはこれだけで悲しいです働いて得ることができません開始

if(isset($_GET['search'])){ 
    $search = $conn->escape_string($_GET['search']); 
    $words = explode(' ',$search); 
    $words_count = count($words); 
    $cpus_columns = ['brand','family','model']; 
    print_r($cpus_columns); 
    $mysql_where = "SELECT brand, family, model FROM cpus WHERE ".$cpus_columns[0]." LIKE ".$words[0]; 
    $mysql_loop = for ($i = 1; $i <= $words_count; $i++){ 
    " OR ".$cpus_columns[$i]." LIKE ".$words[$i] 
    } 
    $mysql_query = $mysql_where . $mysql_loop; 
    $query = $conn->query($mysql_query); 

    echo "<div class='result-count'>Found " . $query->num_rows . " results.</div>"; 

    if($query->num_rows){ 
     while($r = $query->fetch_object()){ 

     echo "<div class='result'><a href='#'>" . $r->brand . $r->model . "</a></div>"; 
     } 
    } 
} 

:ここ
"Intel i7 7700k" "7700k intel i7" "i7 7700k intel"同様 など

も失敗した私のもう一つの試みです。あなたのPHPコードでプリペアドステートメントを使用して、に見てください

+2

を追加することができます。この後、あなたのMySQLクエリの全文検索を調べてみましょう。私はそれがここで役立つと思います。 –

+0

あなたのコードは間違っています(おそらく単に誤植です)。 $ query = $ conn-> query($ search_out);の直後に '$ searchout = foreach ...'があり、 '_ '記号が付きます。あなたは 'foreach($ words as $ word)'ループの中にすべてを入れてみましたか? –

+0

私はクエリを何回か呼び出していたようですが、どうすれば "foreach loop"の "finished result"を取得してクエリに追加できますか? – G1K777

答えて

0

これは私が名前だけのために私の場合にはsomethg ための検索を行う方法ですが、uがより

$arry = array(); 
$arry = explode(" ",$POST["search"]);  

$query="SELECT * FROM tblfbaccban WHERE "; 
for($c=0;$c<sizeof($arry);$c++) 
{ 
    $query=$query."Name LIKE'%$arry[$c]%'"; 
    if($c<sizeof($arry)-1) 
    { 
     $query=$query." OR "; 
    } 
} 
$sql=mysqli_query($mysqli,$query)or die(mysql_error()); 
while ($row = mysqli_fetch_array($sql, MYSQLI_BOTH)) 
{ 
    echo $row["Name"]."<br>"; 
} 
+0

私はあなたのコードを使用しましたが、他にほとんど何もしなかったので、私は500エラーが発生します。 – G1K777

関連する問題