2011-09-22 56 views
0

我正在用子查詢構建MySQL查詢。如​​中所述,該查詢需要通過group-by查詢返回的記錄數,因爲我想要記錄數據庫中的天數。所以我使用以下內容:在子查詢中獲取GROUP BY查詢的行數

SELECT 
    COUNT(*) 
FROM 
(
    SELECT 
    cvdbs2.dateDone 
    FROM 
    cvdbStatistics cvdbs2 
    WHERE 
    cvdbs2.mediatorId = 123 
    GROUP BY 
    DATE_FORMAT(cvdbs2.dateDone, "%Y-%d-%m") 
) AS activityTempTable 

現在,我希望這是一個子查詢,因爲我需要一些更多的數據與不同的WHERE語句。所以我的查詢變爲:

SELECT 
    x, 
    y, 
    z, 
    (
    SELECT 
     COUNT(*) 
    FROM 
    (
     SELECT 
     cvdbs2.dateDone 
     FROM 
     cvdbStatistics cvdbs2 
     WHERE 
     cvdbs2.mediatorId = mediators.id 
     GROUP BY 
     DATE_FORMAT(cvdbs2.dateDone, "%Y-%d-%m") 
    ) AS activityTempTable 
) AS activeDays 
FROM 
    mediators 
LEFT JOIN 
    cvdbStatistics 
ON 
    mediators.id = cvdbStatistics.mediatorId 
WHERE 
    mediators.recruiterId = 409 
GROUP BY 
    mediators.email 

(我從我的查詢遺漏了一些無關痛癢的WHERE語句409只是一個例子ID,這是由PHP插入)。現在

,我發現了以下錯誤:

#1054 - Unknown column 'mediators.id' in 'where clause' 

的MySQL忘記在最深的子查詢的mediators.id。我如何構建一個查詢,其中需要來自主查詢的值的GROUP BY查詢的結果數作爲結果之一?爲什麼不是最深的查詢意識到'mediators.id'?

回答

1

嘗試以下操作:

SELECT 
    x, 
    y, 
    z, 
    (
    SELECT 
     COUNT(distinct DATE_FORMAT(cvdbs2.dateDone, "%Y-%d-%m")) 
    FROM 
     cvdbStatistics cvdbs2 
    WHERE 
     cvdbs2.mediatorId = mediators.id 
) AS activeDays 
FROM 
    mediators 
LEFT JOIN 
    cvdbStatistics 
ON 
    mediators.id = cvdbStatistics.mediatorId 
WHERE 
    mediators.recruiterId = 409 
GROUP BY 
    mediators.email 
+0

我應該知道這個......謝謝,馬克! – dbroeks

0

您是否嘗試在最深的子查詢的FROM中放置「mediators」表?因爲它們是兩個不同的查詢,並且第一個的表不在子查詢中調用。我不知道我說什麼,但我認爲查詢和子查詢之間的唯一關係是子查詢返回的結果。

+0

謝謝您的回答。它們是完全相關的,因爲子查詢的結果對於mediators表中的每條記錄都是不同的(這就是爲什麼我需要mediators.id)。 – dbroeks