ユーザークエリとデータベースがあります。私のデータベースにはテーブルが含まれています。私が知りたいのは、データベースを照会する方法です。私が考えているのは:
- クエリをスペースで区切られた配列に区切ります
- 各単語をループして、LIKE '%{$word}%' OR を実行します
- その上で、各反復の直前に「AND」を実行します
問題は、正しく動作しないことです。私のクエリに一致する正確な電子メールにさいの目切りはしません。これが私のコードです:
$i=0;
$userQuery = $_POST['q']; // q = "Jonathan gmail"
$sql = "SELECT * FROM addresses WHERE ";
$parts = explode(' ',$userQuery);
$cnt=count($parts);
foreach($parts as $part){
$part = mysql_real_escape_string($part);
if($i!==$cnt-1){
$sql.="(
addresses.name LIKE '%".$part."%' OR
addresses.localpart LIKE '%".$part."%' OR
addresses.domain LIKE '%".$part."%'
) AND
";
} else {
$sql.="(
addresses.name LIKE '%".$part."%' OR
addresses.localpart LIKE '%".$part."%' OR
addresses.domain LIKE '%".$part."%'
)
";
}
$i++;
}
}
私の質問は、このロジックの何が問題なのですか? 正確そうです。