0

私が開発しているアプリケーションでは、ユーザーが入力した検索条件を保存し、定期的に (たとえば毎日) 実行して、結果をユーザーに送信できるようにする必要があります。さらに、実行ごとに条件レコードが更新され、最新の実行時刻と前回以降に見つかった新しい結果の数が示されます。
ThingColors および ThingKinds リレーション テーブルを使用して、Colors テーブルおよび Kinds テーブルと多対多のリレーションを持つ Thing というテーブルに対して検索が実行されます。各 Thing は、少なくとも 1 つの Color と 1 つの Kind に関連付けられている必要があり、Name と Rate が必要です。

Things                  Colors          Kinds           ThingColors       ThingKinds
------                  ------          -----           -----------       ----------
ThingId: int            ColorId: int    KindId: int     ThingId: int      ThingId: int
ThingName: varchar      Name: varchar   Name: varchar   ColorId: int      KindId: int
Description: varchar
Rate: int
AddedOn: datetime

保存された基準の表は次のようになります。Criteria は、Colors および Kinds とも多対多の関係にあります。検索条件 (MinRate、MaxRate、Color、および Kind) は必須ではありませんが、少なくとも 1 つを指定する必要があります。検索基準で 1 つ以上の色が指定されている場合、結果に含めることができるように、一致する色が少なくとも 1 つ存在する必要があります。同じタイプの条件が Kind に適用されます。

Criteria                    CriteriaColors         CriteriaKinds
--------                    --------------         -------------
CriteriaId: int             CriteriaId: int        CriteriaId: int
UserId: int                 ColorId: int           KindId: int
CriteriaName: varchar
MinRate: int
MaxRate: int
NewResults: int
LatestRanOn: datetime

結果を生成するための効率的なクエリを探しています (各基準に対して一致したモノのリスト)。同じクエリ内で、新しく見つかった一致 (Criteria の LatestRanOn の後に AddOn を持つもの) の数で Criteria を更新し、LatestRanOn も更新する方法はありますか?

現在、SQL Server 2008 を使用しています。

4

0 に答える 0