2015-06-09 96 views
1

3個表格。 app_forms, app_results, app_exhibitions查詢結果乘以2

我想獲得表單ID,表單名稱,結果數量以及鏈接到表單的展覽數量。目前,我得到這個查詢:

SELECT 
f.id as id, 
f.name as formname, 
count(res.form_id) as resultcount, 
group_concat(b.name separator ', ') as exhibitionname 
FROM app_forms f 
LEFT JOIN app_results res ON f.id = res.form_id 
LEFT JOIN app_exhibitions exh ON exh.form_id = f.id 
GROUP by f.id 

問題是,它乘的事情由2.因爲我也有4個exhbitions的CONCAT組(而不是2)分組和我有4個結果,而不是2計數組。我被困在如何解決這個問題上,這可能與杜貝左派加盟有關。

回答

3

最簡單的解決辦法是在計數使用DISTINCT,如果你有例如app_results.id您app_results表的主鍵:

SELECT 
    f.id as id, 
    f.name as formname, 
    count(DISTINCT res.id) as resultcount, 
    group_concat(b.name separator ', ') as exhibitionname 
FROM 
    app_forms f LEFT JOIN app_results res ON f.id = res.form_id 
    LEFT JOIN app_exhibitions exh ON exh.form_id = f.id 
GROUP by f.id 

或加入一個已經分組表(我設B .name是exh.name):

SELECT 
    f.id as id, 
    f.name as formname, 
    count(res.form_id) as resultcount, 
    exh.exhibitionname 
FROM 
    app_forms f LEFT JOIN app_results res ON f.id = res.form_id 
    LEFT JOIN (
    SELECT form_id, group_concat(name separator ', ') as exhibitionname 
    FROM app_exhibitions 
    GROUP BY form_id 
) exh ON exh.form_id = f.id 
GROUP by f.id 
+1

感謝您的解釋。 DISTINCT函數不起作用,它將計數限制爲1。第二個更清晰一點,它很好看,謝謝! –

+1

@HuubS你說得對,我剛剛更新了我的答案。 COUNT(DISTINCT ID)可以正常工作,但是如果你有這個主鍵,你不得不計算主鍵 – fthiella

+0

謝謝你的答案!真的很有幫助。 –