2012-01-24 13 views
0

私は、テーブルなどの中に複数の列と比較する検索フォームフィールドがあります。それだけのためにデータの行を見つけているようだが、私が作ったクエリが複数のLIKE比較を持っているMySQLクエリでの複数のLIKE比較? - MySQLの、PHP

+----------+-------+---------+------+------------+ 
| name  | owner | species | sex | birth  | 
+----------+-------+---------+------+------------+ 
| Claws | Gwen | cat  | m | 1994-03-17 | 
| Bowser | Diane | dog  | m | 1989-08-31 | 
| Whistler | Gwen | cat  | m | 1997-12-09 | 
+----------+-------+---------+------+------------+ 

を最初の2つの列。

最初の比較は、 "" し、 "所有者" "" し、 "セックス" です。

最初の2つの列に一致する文字列を入力すると行が検索されますが、最後の列の1つに一致する文字列を入力すると何も返されません。ここで

はクエリです:

SELECT * FROM contact 
WHERE name LIKE \"%$search%\" 
OR owner LIKE \"%$search%\" 
OR species LIKE \"%$search%\" 
OR sex LIKE \"%$search%\" 
GROUP BY name, owner,species, sex 

私の唯一の推測では、あなたが使用することができますどのように多くの「OR」のMySQLはおそらく限界ということでしょうか?

ユーザーが入力した文字列が列データと一致する場合は、テーブルから行を返す必要があります。ここで

include("database.class.php"); 

    //search string assigned from POST field 
    $search = $_POST['contact_search']; 

    $db = new database(); 

    $db->select('quote_system'); 

    $result = $db->query("SELECT * FROM contact WHERE name LIKE \"%$search%\" OR owner LIKE \"%$search%\" OR species LIKE \"%$search%\" OR sex LIKE \"%$search%\" GROUP BY name, second_name, owner, species, sex"); 

    print_r($result); 

    while ($row = $db->fetch_assoc($result)) 
    { 
     echo $row['name']; 
     echo $row['owner']; 
     echo $row['species']; 
     echo $row['sex']; 
     echo "<br/>"; 

    } 

のための私のPHPコードを包みなさいここに混乱をtheresのある問題を示すためにいくつかの例は以下のとおりです。

ユーザーは、文字列「爪」を入力 - >文字列の一致データで"name" column - >列がある行を出力する

ユーザーが入力する文字列 "m" - > stringは "sex"列のデータと一致します - >何も表示されません!

ありがとうございました!

+0

Oh No.別のSQLi –

+0

ちょうどヒント。これをしないでください。クエリには使用するインデックスがありません。つまり、フルテーブルスキャン*を何回も実行することができます。 – Layke

+0

@Martin - SQLi? – kaleeway

答えて

1

あなたのクエリ

$result = $db->query(" 
    SELECT * FROM contact 
    WHERE first_name LIKE \"%$search%\" 
    OR second_name LIKE \"%$search%\" 
    OR company_name LIKE \"%$search%\" 
    OR email LIKE \"%$search%\" 
    GROUP BY first_name, second_name, company_name, email 
"); 

別のテーブルに属しているようです。また、あなたはなぜGROUP BYですか?多分、あなたはORDER BYを意味しましたか?

+0

が間違っていたSQLを貼り付けました。今すぐ更新しました – kaleeway

+1

groupbyを使用して重複行を削除しました。 – kaleeway

+0

を使用してDISTINCTを選択してください。 – ACNB