2014-03-06 63 views
0

我已經在使用mysqli的這段代碼:SQL東西錯過了..影響結果

SELECT da_brands.name AS brand_name, 
    COUNT(da_deals.id) AS total_deals, 
    0 AS total_downloaded_coupons, 
    0 AS total_validated_coupons, 
    COUNT(da_logs.id) AS total_likes 
FROM da_brands, da_deals LEFT JOIN da_logs 
    ON da_logs.fk_deal_id = da_deals.id 
    AND da_logs.type = 'deal_like' 
WHERE da_brands.fk_club_id = 6 
    AND da_deals.fk_brand_id = da_brands.id 
GROUP BY da_brands.name 
ORDER BY da_brands.name ASC 

結果:

brand_name total_deals total_downloaded_coupons total_validated_coupons otal_likes 
Marca2  2    0       0       1 
Marca1  12    0       0       4 

應該是:

brand_name total_deals total_downloaded_coupons total_validated_coupons total_likes 
Marca2  2    0       0       1 
Marca1  9    0       0       4 

任何想法?

+0

所以,你爲Marca1的total_deals獲得了錯誤的值,對嗎? – larsAnders

+0

耶! COUNT增加了更多COUNT我認爲我錯過了一些條件語句 –

回答

0

我相信你想要COUNT(DISTINCT da_deals.id) AS total_deals,,因爲你只想計算一次交易ID。

編輯:您的FROM語句是隱式內部連接(逗號)和顯式外部連接的列表。我錯過了。

您的查詢也許應該這樣寫,所有明確連接:

SELECT da_brands.name AS brand_name, 
    COUNT(DISTINCT da_deals.id) AS total_deals, 
    0 AS total_downloaded_coupons, 
    0 AS total_validated_coupons, 
    COUNT(DISTINCT da_logs.id) AS total_likes 
FROM da_brands 
INNER JOIN da_deals 
    ON da_deals.fk_brand_id = da_brands.id 
LEFT JOIN da_logs 
    ON da_logs.fk_deal_id = da_deals.id 
    AND da_logs.type = 'deal_like' 
WHERE da_brands.fk_club_id = 6 
GROUP BY da_brands.name 
ORDER BY da_brands.name ASC; 

爲了顯示品牌,即使他們缺乏交易和喜歡,嘗試LEFT JOIN這樣的:

SELECT da_brands.name AS brand_name, 
    COUNT(DISTINCT da_deals.id) AS total_deals, 
    0 AS total_downloaded_coupons, 
    0 AS total_validated_coupons, 
    COUNT(DISTINCT da_logs.id) AS total_likes 
FROM da_brands 
LEFT JOIN da_deals 
    ON da_deals.fk_brand_id = da_brands.id 
LEFT JOIN da_logs 
    ON da_logs.fk_deal_id = da_deals.id 
    AND da_logs.type = 'deal_like' 
WHERE da_brands.fk_club_id = 6 
GROUP BY da_brands.name 
ORDER BY da_brands.name ASC; 
+0

好的謝謝,但是現在如果要爲品牌顯示空行,我應該怎麼做,我的意思是沒有顯示第三個BRAND與該查詢。 –

+0

@ MiguelNavarro-PraiseJesus然後,你會想要使用'OUTER JOIN',就像上面一樣。請注意,我做了兩個聚合函數「DISTINCT」。爲喜歡的一個可能是不必要的,但它指定你想要每個Like ID計數一次。 –