2016-05-18 110 views
1

我想計算已禁用的產品數量並有選項。 首先,我嘗試檢查一個表中的oc_product產品是否被禁用,然後我想通過此狀態檢查(如果禁用產品)並在另一個表中檢查產品ID,則此產品ID有選項。mysql依賴於其他

我嘗試這樣做,但只能顯示status = 0產品的結果。

select COUNT(*) 
FROM oc_product 
WHERE status=0 
    AND product_id IN (SELECT product_id FROM oc_product_option) 
+3

當然,因爲你加了status = 0對嗎?那麼你的問題是什麼? – vaso123

+0

hm,我需要計算oc_product中的產品設置爲status = 0的位置,然後從結果中檢查oc_product_option中有多少個狀態爲0的產品具有行。 – Marty

+0

你目前的查詢有什麼問題? – sagi

回答

0

如果我動搖你的問題,你想加入表格。

SELECT COUNT(*) FROM oc_product ocp 
INNER JOIN oc_product_option ocpo ON ocpo.product_id = ocp.id 
WHERE ocp.status=0 

因此,只有那些行會的回報,其中product_id在選項表(ocpo.product_id = ocp.id

+0

我用這個查詢得到SQL語法錯誤 – Marty

+0

@Marty我用你的查詢並在我的數據庫中運行它正在工作很好!我得到了你需要的相同迴應。 –

+0

@kiran gadhvi#1064 - 你的sql語法錯誤檢查手冊,對應於你的mariadb服務器版本的正確語法使用附近'ocp INNER JOIN oc_product_option ocpo ON ocpo.product_id = ocp.id WHERE ocp.st '在第1行 – Marty

0

如果我理解正確的話,你想要的所有產品的計數狀態爲0,而且所有產品的計數狀態爲0,有選項。

如果是這樣,LEFT OUTER JOIN產品帶有選項。然後,您可以計算產品表中的DISTINCT product_id以獲取產品數量,並且您可以從產品選項表中統計DISTINCT product_id以獲得包含選項的產品數量。 COUNT(column_name)不計算column_name值爲NULL的行,因此不會計算未找到匹配選項的產品。

SELECT COUNT(DISTINCT oc_product.product_id) AS product_count, 
     COUNT(DISTINCT oc_product_option.product_id) AS product_with_options_count 
FROM oc_product 
LEFT OUTER JOIN oc_product_option 
ON oc_product.product_id = oc_product_option.product_id 
WHERE oc_product.status = 0