1

我正在开发 opencart 项目。在管理面板中,我只想列出那些不属于类别 id 71 的产品,即使该产品没有与任何类别进行映射。

以下是我根据条件获取产品的查询:

SELECT * 
FROM nu_product p 
LEFT JOIN nu_product_to_category p2c ON (p.product_id = p2c.product_id) 
LEFT JOIN nu_product_description pd ON (p.product_id = pd.product_id)
WHERE pd.language_id = '1' AND p2c.category_id != '71' 
GROUP BY p.product_id 
ORDER BY p.product_id DESC 
LIMIT 0,20  

但上述条件只给了我不属于类别 id 71 的产品。不属于任何类别的产品没有显示。我也想展示给他们看。
所以,请告诉我上面的查询有什么问题。我是否错过了上述查询中的某些内容。

4

2 回答 2

1

你的问题是NULL category_ids。该表达式的NULL != '71'计算结果为NULL, (显然不是true),因此该p2c.category_id != '71'条件将它们排除在外。为了解决这个问题,你必须明确地处理那些NULLs,例如,像这样:

SELECT    * 
FROM      nu_product p 
LEFT JOIN nu_product_to_category p2c ON (p.product_id = p2c.product_id) 
LEFT JOIN nu_product_description pd ON (p.product_id = pd.product_id)
WHERE     pd.language_id = '1' AND (p2c.category_id IS NULL OR p2c.category_id != '71')
GROUP BY  p.product_id 
ORDER BY  p.product_id DESC LIMIT 0,20
于 2013-10-25T07:28:53.203 回答
0
SELECT * 
FROM nu_product p 
LEFT JOIN nu_product_to_category p2c ON (p.product_id = p2c.product_id) and p2c.category_id != '71' 
LEFT JOIN nu_product_description pd ON (p.product_id = pd.product_id) and pd.language_id = '1'
GROUP BY p.product_id 
ORDER BY p.product_id DESC 
LIMIT 0,20  

试试这个,基本上你的 where 子句将其更改为内部连接。

于 2013-10-25T07:32:22.933 回答