2013-10-25 53 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子句是其更改爲內連接。