私は、PHPを使用して、ユーザーが特定のアイテムの写真を探すためにキーワードを入力できるページ上に簡単な検索ボックスを作った。私はMySQLデータベースを使用しています。私は結果をトリミングし、ロードを速くするために10だけを表示しますが、キーワードの特定のセットはブラウザがIEとFirefoxの両方でハングする原因になります。これがIEで起こると、写真をロードしたときと同様に右上に「X」マークが付いた10個の結果を超える写真の輪郭(シルエットのみ)を見ることができ、写真はウェブページ上に存在しません私はコードを書いて10個の結果しか表示しませんでした。データベースには10,000件を超えるエントリーがあり、データベース内のすべての写真を表示しようとしているのかもしれません。ここで私が使用しているいくつかのコードです。検索ページのロードが極端に遅い(MySQLとPHP)
私は以下の関数を使用してクエリを作成しています。 $キーワードは、ユーザーが入力したキーワードの配列です。
function create_multiword_query($keywords) {
// Creates multi-word text search query
$q = 'SELECT * FROM catalog WHERE ';
$num = 0;
foreach($keywords as $val) { // Multi-word search
$num++;
if ($num == 1) {
$q = $q . "name LIKE '%$val%'"; }
else {
$q = $q . " AND name LIKE '%$val%'";}
}
$q = $q . ' ORDER BY name';
return $q;
//$q = "SELECT * FROM catalog WHERE name LIKE \"%$trimmed%\" ORDER BY name";
}
結果を表示します。 MAX_DISPLAY_NUMは10
$num = 0;
while (($row = mysqli_fetch_assoc($r)) && ($num < MAX_DISPLAY_NUM)) { // add max search result!
$num++;
print_images($row['img_url'], '/_', '.jpg'); // just prints photos
}
である私は非常にPHPと初心者だけど、私は自分のコードに何かを見つけるように見えることはできません。たぶん、私はこれらのアルゴリズムを書いた方法は、PHPやMySQLのためのかなり適切ではない?あなたたちはこれで私を助けてくれますか?私は必要に応じてより多くのコードを投稿することができます。 TIA !!
皆さん、LIMIT 10はブラウザがフリーズしても動作しないようです。 10件の結果が表示されますが、検索結果ページは10個目の検索結果を超えるXの空白のボックスが表示されています。私はLIMIT 10のステートメントが実際にクエリに含まれていることを確認しています。別の理由がありますか?ところで、ブラウザをフリーズさせるクエリは、合計16個の結果しか返しません。 – musicliftsme
私は何かがwhileループで正しくないと思う。 while($ num == 0)を実行して1つの結果しか表示しない場合、それは最初に説明したのと同じ方法でハングします。私はこれをさらに調べます。 – musicliftsme
HM ..私は、反復回数が限られているforループを試してみました。代わりにmysqli_fetch_row()を使用しましたが、明らかに問題ではありません。私のブラウザをフリーズさせるのはDBからの特定の行です。たとえば、アイテム「A」を返す検索を実行すると、このクエリは検索ボックスに入力された内容に関係なくブラウザをフリーズします。奇妙な..アイテム "A"を検索すると、phpMyAdmin内で問題なく動作します。 – musicliftsme