2013-10-25 29 views
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.未属于任何类别只产品,在产品不展示。我也想展示给他们。
所以,请告诉我上述查询有什么问题。我在上面的查询中错过了什么。

+1

在'ON'子句中移动您的'WHERE'条件。 'FROM \t nu_product p \t \t LEFT JOIN nu_product_to_category P2C \t \t \t ON p.product_id = p2c.product_id \t \t \t \t AND p2c.category_id!= '71' \t \t LEFT JOIN nu_product_description PD \t \t \t ON p.product_id = pd.product_id \t \t \t \t AND pd.language_id ='1'' –

+0

在que应用您的更改后ry,它也显示属于类别ID 71的产品。 – user2393886

+0

它对您期望的结果并不清楚。也许第一个连接应该是内连接。所有产品都有一个类别吗? –

回答

1

您的问题与NULLcategory_id s。表达式NULL != '71'评估为NULL(显然不是true),因此p2c.category_id != '71'条件将它们排除在外。 为了解决这个问题,你必须明确地处理这些NULL S,例如,像这样:

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 
+0

其工作正常,非常感谢 – user2393886

+1

@ user2393886如果这解决了您的问题,请接受答案 – Mureinik

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子句是其更改为内连接。