0

いくつかのテーブルを含むデータベースがあります。例として、単純化して詳細に説明します。

1 つのテーブルは Products と呼ばれ、別のテーブルは Brands と呼ばれ、最後のテーブルは Categories と呼ばれます。

ご想像のとおり、各製品には 1 つのカテゴリのみを割り当てることができます。また、各製品には 1 つのブランドのみを割り当てることができます。これらは関係です。

そのため、あるページには、特定のブランドのすべての製品を一覧表示する詳細ページに渡すパラメーターとしてブランドとのリンクがあります。そのページには、そのフィルターで選択したブランドの製品のみをフィルターするカテゴリー別フィルターもあります。

たとえば、Sony -> ドロップダウンから適用されるフィルタは dSLR -> Sony ブランドの dSLR カメラ製品の結果です。

私が望むのは、そのカテゴリをフィルタリングして、ブランドに特定のカテゴリがない場合、そのドロップダウン フィルタにも表示されないようにすることです。

たとえば、カテゴリは次のように事前定義されています: デジタル一眼レフ、ビデオ、携帯電話、靴

ソニーにはたくさんの製品がありますが、靴は作っていないので、詳細ページのフィルター リストから除外したいと思います。

ここで私が何を望んでいるのか理解していただければ幸いです...

どんな提案も大歓迎です:)

4

2 に答える 2

1

さて、次のように 3 つのテーブルを結合できるはずです。

SELECT DISTINCT c.category_id, c.category_name
FROM products p
JOIN categories c ON p.category_id = c.category_id
JOIN brands b ON p.brand_id = b.brand_id
WHERE b.brand_name='Sony';

次に、製品を次のように表示します。

SELECT p.product_id, p.product_name
FROM products p
JOIN categories c ON p.category_id = c.category_id
JOIN brands b ON p.brand_id = b.brand_id
WHERE b.brand_name='Sony' AND c.category_id='1234';

danishgoel が既に述べたように、これは非常にコストのかかるクエリであるため、テーブルに適切なインデックスがあることを確認してください。

于 2011-09-27T07:59:44.097 に答える
0

1つの方法は、特定のブランドの製品から個別のカテゴリのリストを選択することです。

あなたはそれを次のように行うことができます:

SELECT DISTINCT(cat_id) FROM PRODUCTS WHERE brand_id = 'sony'

sonyこれで、製品に使用できるカテゴリのみが表示されます。

上記のクエリは、各ページリクエストで実行するのに少し時間がかかる場合があります。でINDEXを作成することでスピードアップできますbrand_id, cat_id

于 2011-09-27T07:32:23.587 に答える