タグに基づいて写真テーブルの検索を実行しようとしています。
検索語を個々のキーワードに分割し、個々のキーワードごとにテーブルを検索して、一致するものを配列にプッシュします。
$keywords = explode(' ', $keywords);
$photos = array();
// loop through each keyword
foreach($keywords as $keyword){
$row = $mysqli->query(" SELECT * FROM photos WHERE tags LIKE '%$keyword%' ");
// loop through each row result
while( $query_result = $row->fetch_assoc() ){
// push result to photos array
array_push($photos, $query_result);
}
}
ただし、これは同じテーブル行を複数回返す可能性があります。たとえば、「mod modded」を検索すると、「modded」のタグを持つ写真は両方のキーワードに一致するため、配列の先頭に 2 回プッシュされます。
行を 1 回だけ選択するようにするにはどうすればよいですか?
編集
返信ありがとうございますが、どちらもうまくいきませんでした。
$keywords = explode(' ', $keywords);
$photos = array();
// loop through each keyword
foreach($keywords as $keyword){
$row = $mysqli->query(" SELECT * FROM photos WHERE tags LIKE '%$keyword%' ");
// loop through each row result
while( $query_result = $row->fetch_assoc() ){
$dontPush = false;
// check photos array to see if the query_result already exists
foreach($photos as $photo){
if($photo == $query_result){
$dontPush = true;
}
}
if($dontPush === false){
// push result to photos array if it dodesnt already exist
array_push($photos, $query_result);
}
}
}
しかし、これにより非常に多くのループが作成されるため、大きなデータベースがある場合、結果を返すのに確かに長い時間がかかりますか? より良い方法はありますか