ユーザーがデータベース内のアイテムを検索できるようにするWebアプリを開発しています。アイテムはいくつかのカテゴリに分類されます。返される各検索項目は、そのフィールド値に応じて異なる方法で表示されます。現在、表示を処理するクラスと検索を処理するクラスを作成しました。検索クラスは、いくつかのユーザー入力を使用してSQLクエリを作成し、ユーザー入力に一致するアイテムのIDをデータベースに照会し、配列内のIDを表示クラスに送信します。
これを行うコードの抜粋:
//the sql query is actually a little more complex than this
$query = "SELECT items.id FROM items, subcategories WHERE {$name} AND items.`base_school` = '{$_SESSION['base_school']}' AND items.subcategory = subcategories.id AND subcategories.parent_category = {$search_category} ORDER BY `time_added` DESC {$limit}";
$result = $DB_CONNECTION->query($query);
$newly_added = array();
while (list($id) = $result->fetch_row()) $result[] = $id;
searchDisplay::print_result($result);
displayクラスは、データベースに各アイテムの完全な詳細を次々に照会し、表示されるとおりに表示します。
私の質問は、データベースが最初にクエリされたときにアイテムの完全な詳細(3つの異なるテーブルからの約23フィールド)をデータベースにクエリし、データを配列に格納してから、その配列を表示クラスにアイテムの一意のIDを使用して各アイテムのデータベースを照会させるのではなく、表示クラス?私の現在のソリューションは今のところ正常に実行されていますが、データベースが大きくなり始めたとき(約500,000行)にアプローチに問題があるかどうかを知る必要があります。
次に、データベースからのデータは、ユーザーが指定したいくつかの検索条件を使用してフィルタリングされます。すべてのユーザーの条件に対応するいくつかの結合を含む複雑なクエリを作成するか、主要なフィルターに対応する単純なクエリを作成し、PHPを使用して検索条件に一致しない残りのいくつかの結果をフィルター処理する方がよいでしょうか。