2011-03-23 48 views
1

我有一個問題與MySQL查詢: 我有兩個表: - clustercategories - 域複雜的MySQL查詢問題

現在我有一個SQL查詢,列出一個特定類別的所有域與類別名稱 - 這是我的查詢:

SELECT domains.*, clustercategories.clustercategoryname 
FROM (domains, clustercategories) 
WHERE ((clustercategories.id = 3 AND (domains.cluster1id = 3 OR domains.cluster2id = 3)) 
OR (clustercategories.id = 10 AND (domains.cluster1id = 10 OR domains.cluster2id = 10))) 
AND domains.status = '1' 
GROUP BY domains.name 
ORDER BY domains.name 

現在的問題,我也有一個第三個表「子頁」,我想算與狀態特定域的所有條目=「1」,我不知道如何修改我的查詢工作 - 我試過這個查詢,但我沒有得到任何結果:

SELECT domains.*, clustercategories.clustercategoryname 
FROM (domains, clustercategories) 
WHERE ((clustercategories.id = 3 AND (domains.cluster1id = 3 OR domains.cluster2id = 3) AND (SELECT COUNT(*) AS total FROM subpages WHERE subpages.domainid = domains.id AND subpages.status = '1')) 
OR (clustercategories.id = 10 AND (domains.cluster1id = 10 OR domains.cluster2id = 10) AND (SELECT COUNT(*) AS total FROM subpages WHERE subpages.domainid = domains.id AND subpages.status = '1'))) 
AND domains.status = '1' 
GROUP BY domains.name 
ORDER BY domains.name 

有沒有人任何想法?

+0

您可以發佈表定義嗎? – Martijn 2011-03-23 13:06:24

回答

1

在我看來你的第一個查詢可以寫成這樣

SELECT d.* 
     , cc.clustercategoryname 
FROM domains d 
     INNER JOIN clustercategories cc 
      ON cc.id = d.cluster1id 
      OR cc.id = d.cluster2id 
WHERE cc.id IN (3, 10) 
     AND d.status = '1'           
GROUP BY 
     d.name 
ORDER BY 
     d.name 

從而增加子頁的計數可以這樣完成

SELECT d.* 
      , cc.clustercategoryname 
      , sp.total 
    FROM domains d 
      INNER JOIN clustercategories cc 
      ON cc.id = d.cluster1id 
       OR cc.id = d.cluster2id 
      LEFT OUTER JOIN (
      SELECT COUNT(*) AS total 
        , domainid 
      FROM subpages 
      WHERE subpages.status = '1' 
      GROUP BY 
        domainid 
     ) sp ON sp.domainid = d.domainid   
    WHERE cc.id IN (3, 10) 
      AND d.status = '1'           
    GROUP BY 
      d.name 
    ORDER BY 
      d.name 
+0

這個查詢看起來很有希望,但是我總是在'字段列表'中得到錯誤'未知列'總計'' - 我的意思是沒關係,因爲總數不可用並且只有總數爲(*)的鏈接 - 但是這裏有什麼問題? – codeworxx 2011-03-23 13:06:11

+0

好吧,我將sp.total更改爲sp。*和total = COUNT(*)COUNT(*)總計 - 現在所有事情都按預期工作!非常感謝!你讓我的一天:) – codeworxx 2011-03-23 13:09:58

+0

@codeworkxx - 對不起,我錯過了你的評論(離開)。好,你已經爲你解決問題。我編輯了該語句以將SQL Server語法更改爲MySQL語法。 – 2011-03-23 13:38:10

2

我認爲你會希望把你的子查詢到您的投影,就像這樣:

SELECT domains.*, clustercategories.clustercategoryname, 
(SELECT COUNT(*) FROM subpages WHERE subpages.domainid = domains.id AND subpages.status = '1') AS total 
FROM domains, clustercategories 
WHERE ((clustercategories.id = 3 AND (domains.cluster1id = 3 OR domains.cluster2id = 3)) 
OR (clustercategories.id = 10 AND (domains.cluster1id = 10 OR domains.cluster2id = 10))) 
AND domains.status = '1' 
GROUP BY domains.name 
ORDER BY domains.name