パフォーマンスへの影響をできるだけ少なくしてこれを行う最善の方法について少し苦労しています。
これがセットアップです...
新しい (洗練された) 結果セットを返す PHP ハンドラーへの AJAX 呼び出しを行う検索絞り込みフィルターを含む検索結果ページ。
PHP ハンドラー コードで接続する必要があるすべてのデータを含む 4 つのテーブルがあります。
表 1 - 主な詳細を含むレコードのメイン テーブル
表 2 - プロの格付け会社 #1 による各製品の格付け
表 3 - プロの格付け会社 #2 による各製品の格付け
表 4 - プロの格付け会社 #3 による各製品の格付け
検索結果ページの絞り込み条件は、許容される最低評価から最高評価までの範囲を持つ jquery スライダーです。
スライダー ハンドルを移動すると、新しい値で新しい AJAX 呼び出しが行われ、データベース クエリが実行されて、洗練された結果の新しいセットが作成されます。
表 1 から必要なデータを取得するのは簡単です。私が苦労しているのは、他の3つのテーブルに結合を効率的に含め、絞り込み値/範囲に一致する行のみを選択する方法です。表 2、3、および 4 にはすべて、年 (2004 年から 2012 年) の複数の列があり、最初にすべてを 1 つのクエリに入れようとしたときに行き詰まりました。
表 2、3、および 4 は、表 1 の各レコードのさまざまな評価を保持します。
表 2、3、および 4 の列は... id - productID - y2004 - y2005 - y2006 - y2007 - ... おわかりでしょう。
各年の列には、各レコードの数値があります (デフォルトは 0)。
私がしなければならないことは、一度に 4 つのテーブルすべてでユーザーが選択した絞り込み条件の範囲に一致するレコードを効率的に選択することです。
絞り込み検索の例は次のようになります...価格が 25 ドルから 50 ドルである表 1 からすべてのレコードを取得し、かつ表 2 のレコードの評価が (任意の年/列から) 1 ~ 4 であり、かつ表 3 のレコードの評価が (任意の年/列から) 80 から 100 の間で、かつ、表 4 のレコードの評価が (任意の年/列から) 80 から 100 の間である場合。
これを可能な限り多くのパフォーマンスでセットアップする方法に関するアドバイスはありますか?