1

OK - ここで何か助けが必要です - ここで噛み砕くことができなかったかもしれません - しかし、私は常に最低 10 件の結果を返す SQL クエリを書きたいと思っています。最初の条件が適用され、結果セットが 10 件を超えた場合は、次の条件に進みます。

例 5.00 ポンド未満の小さな赤いプラスチック製のおもちゃの車をすべて見つけます。

画面には常に最低 10 個のアイテムを表示したいと考えています。「小」、「赤」、「<」の順に検索したい。£5.00」。クエリが 10 を超えるアイテムを返した場合は、できるだけ多くのタグ (プラスチック、おもちゃ、車など) でフィルタリングを続けます。一致する数が多いほど、ランク付けが高くなります (つまり、製品に 3 つのタグがすべて関連付けられている場合)。それ – リストの一番上に表示されます。製品が 1 つのタグのみに一致する場合、これはリストの下に表示されます。

Price Table
ID      Price
1       £1.50
2       £2.50
3       £6.00
.
Colour Table
ID      Colour
1       Red
2       Blue
3       Yellow
.
Size  Table
ID      Shape
1       Small
2       Medium
3       Large
.
Products Table
ID  Description    price_id     colour_id   size_id
1   Item 1         1            2           2
2   Item 2         2            2           1
3   Item 3         1            1           1
4   Item 4         3            2           3
5   Item 5         3            1           2
6   Item 6         1            1           2
7   Item 7         1            1           3

 .
Tags Table
ID      Description
1   Shiny
2   Plastic
3   Wood
4   Toy
5   Disney
6   Animal
7   Car
.
Items_Tags Table
ID      tag_id      product_id
1       1           1
2       4           1
3       7           1
4       2           2
5       3           3
6       4           3
7       7           6
8       7           7
9       7           2

かなり長い例ですが、要点を理解していただければ幸いです。すべてのフィルターをタグ テーブル内に配置する利点があるかどうか疑問に思いました。つまり、価格、色、サイズなどで、タグ テーブルを検索するだけで済みます。

アイデアはありますか?

ありがとう

4

1 に答える 1

1

それはあなたの使い方次第です: 整数のフィルタリングは文字列よりも高速です (ちなみに、それらはインデックス化されていますか?) が、JOIN も時間がかかります。したがって、SQL の外側のコードが整数で機能する場合は、それらを保持します (テキストを表示する必要がない場合は結合しないでください)。

于 2012-07-04T14:18:42.433 に答える