PHP プロジェクトにフィルター関数を実装したいと考えています。フィルターを実装するには、通常、クエリに WHERE 句を追加して、フィルター処理された結果を表示します。
私の問題は次のとおりです。これらのフィルターには、追加された単純な WHERE 句だけでなく、複数の JOIN を含む巨大なクエリが必要です。結果のクエリには 30 行以上あります。
後で、この巨大なクエリも必要とする検索機能も必要です。これが良い方法なのか、それとも更新ごとにフィルタリングするために必要な属性を計算するデータベース テーブルに「冗長な」データベース列を追加する必要があるのか 疑問に思います。この列を使用すると、プロジェクトのさまざまな場所で巨大なクエリを実行することはできなくなりますが、冗長な列ができます。
どう思いますか?
ご挨拶
質問されたように、ここにテーブル構造/コードがあります。これは正確なコードではありません。これは、さらに複雑にするリビジョン システムも存在するためですが、理解するにはこれで十分です。
テーブル提出:
ID (primary)
(additionalColumns)
テーブル レポート:
ID (primary)
submissionID (reference to submission table)
(additionalColumns)
テーブル report_objects:
reportID (reference to reports table, multiple report_object for one report)
テーブル アカウンティング:
ID (primary)
reportID (reference to reports table, multiple accountings for one report)
(additionalColumns)
テーブル account_objects:
ID
accountingID (reference to accounting table, multiple accounting_object for one accounting)
(additionalColumns)
送信の場合、複数のオブジェクト (report_objects) を考慮して 1 つまたは複数のレポートが作成されます。レポートごとに、複数のアカウンティングを作成できます。各アカウンティングは、レポートのいくつかのオブジェクト用です。アカウンティングされた report_objects は、accounting_object に格納されます
私のクエリ/フィルターは、submissionID の各 report_object が 1 つの submitID に対してアカウント化されている (accounting_object が存在する) かどうかをチェックします。