2015-06-09 97 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

谢谢你的答案!真的很有帮助。 –