3

私はmysqlがこれを行うことができると確信していますが、クエリの書き方の手がかりがありません.

次のテーブルがある場合:

Product
id    name


Product Relationship
parent_id    child_id



Product Category
id    category_name


Product Categories
product_id    category_id

各製品には、表示が許可されているカテゴリのリストがあり、それらのカテゴリでのみ表示される必要があります。

ここで難しい点: 親 > 子製品の関係が存在する場合、各子製品 ID もこのルールの一部と見なす必要があり、カテゴリで子製品が表示されない場合、製品全体が表示されないようにする必要があります。

可視性は、ここに書き込もうとしているクエリによって返される結果セットに結果がないことによって決まります。

一般的な入力は、製品 ID、該当する場合は親と子の ID、およびカテゴリ ID です。

これは単一のクエリで可能ですか?もしそうなら、どうすればそれを書くことができますか?

4

1 に答える 1

0

IFこれはMySQLのケースではないと思います(あなたが行うことができますJOIN)、サブクエリまたはより複雑な例の何が問題なのですか

SELECT
  p.*
FROM
  `Product` p
LEFT JOIN
  `Product_Relationship` c
  ON p.id = c.parent_id OR p.id = c.child_id
WHERE
  p.id IN(
    SELECT product_id FROM `Product_Categories`
  )
  AND (
    c.id IS NULL
    OR c.id IN(
      SELECT product_id FROM `Product_Categories`
    )

免責事項:スキーマに対してこれをテストしていません

于 2013-07-15T18:13:23.633 に答える