0

新しいWebサイトで結果をフィルタリングする機能を構築しています。各結果には、3つの別々のテーブル(以下にA、B、およびCとして表示)からのデータが含まれています。マッピングテーブル(DからK)には、私のフィルターの大部分が基づいているデータが含まれています。

A.id、A.name、B.rating、C.priceの列を持つ行を返したいと思っています。ここで、DKにはBに関する特定のデータが含まれています。私が持っているフィルターの内容は、マッピングテーブルの一連のIDです。フィルタを最小限に抑えることも、A、B、Cの関係を1つ返す前にチェックする必要のあるIDを20個まで持つこともできます。さらに、1ページに表示できる結果は12個に制限されています。

上記のことを考えるだけで私の脳は揚げられます。以下にできる限り、テーブルの構造を描きました。あなたが提供できるどんな助けでも大いに感謝されるでしょう。ありがとう!

データベース設計

スキーマ情報 編集

A: id INT PRIMARY, name VARCHAR(255)

B: id INT PRIMARY, a_id INT, rating FLOAT

C: id INT PRIMARY, b_id INT, price DECIMAL(10, 2)

マッピングテーブルD-K: b_id INT, ?_id INT

D-K: id INT PRIMARY, name VARCHAR(255)

4

1 に答える 1

0

あなたがいくつかのことをしたいように聞こえますJOIN

SELECT A.name, B.rating, C.price
FROM A
JOIN B ON A.id = B.a_id
JOIN C ON B.id = C.b_id

次に、他のテーブルからのフィルタリングを行うために、それらも結合します。

SELECT A.name, B.rating, C.price
FROM A
JOIN B ON A.id = B.a_id
JOIN C ON B.id = C.b_id
JOIN BDmapping ON B.id = BDmapping.b_id
JOIN BEmapping on B.id = BEmapping.b_id
WHERE BDmapping.d_id = <some value>
AND BEmapping.e_id = <some value>

理想的には、特定のクエリに実際に使用する必要があるテーブルのみに参加する必要があります。特定のフィールドでフィルタリングしない場合は、そのテーブルに参加しないでください。

于 2012-06-25T05:19:25.267 に答える