次の2つのMySQLテーブルがあります
- 製品 (product_id、名前、カテゴリ)
- products_sizes (商品 ID、サイズ)
すべての製品は複数のサイズを持つことができます
クエリを作成する必要があります
- カテゴリとサイズ (サイズが設定されている場合) に基づいて製品を選択します - 例: カテゴリ = '靴' およびサイズ = '10'
- 商品のすべてのサイズを返す必要がありますが、商品に特定のサイズがある場合に限ります。
- 同時に、製品の結果をオフセットのある特定の数に制限する必要があります
私は今、以下のクエリを持っています。私は動作しますが、カテゴリによって制約されず、指定された 1 つのサイズ (ここでは「10」) のみが返されます。すべてのサイズが必要ですが、サイズに「10」がある製品のみが必要です...
SELECT products.*
, products_sizes.*
FROM (
SELECT *
FROM products
LIMIT $limit OFFSET $offset
) AS products
LEFT JOIN products_sizes
ON products.products_id = products_sizes.products_id
WHERE products_sizes.size = 10
...そして、WHERE category = 'something'クエリを追加すると、何も返されません...
SELECT products.*
, products_sizes.*
FROM (
SELECT *
FROM products
WHERE category = 'shoes'
LIMIT $limit OFFSET $offset
) AS products
LEFT JOIN products_sizes
ON products.products_id = products_sizes.products_id
WHERE products_sizes.size = 10
??
更新: 近づいています...
答えを読んだ後、私は今これを持っています:
SELECT *
FROM products AS p
LEFT JOIN products_sizes AS s
ON p.product_id = s.product_id
WHERE s.product_id
IN (SELECT product_id FROM s WHERE size = 10)
AND p.category = 'shoes'
最初の質問の最初の 2 つの要件を満たしています。
- カテゴリとサイズによって制限された結果を返します
- サイズの 1 つが指定されたサイズと等しい場合、各商品のすべてのサイズを返します
...しかし、結果を特定の数の製品に制限する必要があります。クエリの最後に LIMIT $limit を配置すると、製品の数ではなく、返されるサイズの数が制限されます...ご意見ありがとうございます。