208*_*083 5 php mysql sql join
我有两个MySQL表
每种产品都可以有多种尺寸
我需要进行查询
我现在的查询如下.我工作,但不限制类别,只返回指定的一个尺寸(这里'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
Run Code Online (Sandbox Code Playgroud)
...如果我添加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
Run Code Online (Sandbox Code Playgroud)
??
更新:越来越近了......
看完答案后,我现在有了这个:
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'
Run Code Online (Sandbox Code Playgroud)
它满足了我最初的问题的前两个要求:
...但我仍然需要将结果限制为一定数量的产品.如果我在查询的最后添加LIMIT $ limit,它将限制返回的大小数量而不是产品数量...感谢输入.
主查询中的子句WHERE违背了您的目的LEFT JOIN,使其与INNER JOIN. 您的派生表很可能没有选择任何匹配的行(尺码为 10 的鞋子)。
除非您的数据有某些内容未显示,否则您可以尝试以下操作:
SELECT products.*
, products_sizes.*
FROM products
JOIN products_sizes
ON products.products_id = products_sizes.products_id
WHERE products.category = 'shoes'
AND products_sizes.size = 10
LIMIT $limit OFFSET $offset
Run Code Online (Sandbox Code Playgroud)