我正在开发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的产品。不属于任何类别的产品未显示。我想也要展示它们 那么,请告诉我上面的查询有什么问题。我错过了以上查询中的内容。
答案 0 :(得分:1)
您的问题出在NULL
category_id
上。表达式NULL != '71'
的计算结果为NULL
,(显然不是true
),因此p2c.category_id != '71'
条件将其排除。
为了解决此问题,您必须明确处理这些NULL
,例如:
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
答案 1 :(得分: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子句将其更改为内连接。