2015-05-11 45 views
-1

我得到了一个关于MySQL的问题,并找到了正确的查询。将查询结果分成一行

目前,我得到这个查询:

SELECT f.id 
, f.name 
, e.name as exhibition_name 
, l.name as `language` 
FROM `app_forms` f 
LEFT JOIN `app_exhibitions` e ON(f.id = e.form_id) 
LEFT JOIN `app_forms_translations` ft ON(ft.form_id = f.id) 
LEFT JOIN `app_languages` l ON(ft.lang_id = l.id) 

这种结合记录从下表:

app_exhibitions 
-id 
-name 
-location 
-form_id 

app_forms 
-id 
-name 

app_form_translations 
-id 
-form_id 
-lang_id 
-content 

app_languages 
-id 
-name 
-code 

但现在我得到的多条记录,如果有一个单一的展览多种形式,哪些列表形式是双重的,但每个列表都有不同的展览。我希望他们组合起来,这样我就可以获得每一个表格的单行,但是展览会与concat分组在一起。

我已经试过这个,但是我得到了一个记录,列出了展览专栏中列出的每一个展览名称。

SELECT f.id 
    , f.name 
    , group_concat(e.name separator ',') as exhibition name 
    , l.name as `language` 
FROM `app_forms` f 
LEFT JOIN `app_exhibitions` e ON(f.id = e.form_id) 
LEFT JOIN `app_forms_translations` ft ON(ft.form_id = f.id) 
LEFT JOIN `app_languages` l ON(ft.lang_id = l.id) 
+0

此查询失败。是别名“exhiibition”[原文如此]或“名字” – Strawberry

回答

1

您需要group by

SELECT f.id, 
     f.name, 
     group_concat(e.name separator ',') as exhibition name, 
     l.name as `language` 
FROM `app_forms` f 
LEFT JOIN `app_exhibitions` e ON(f.id = e.form_id) 
LEFT JOIN `app_forms_translations` ft ON(ft.form_id = f.id) 
LEFT JOIN `app_languages` l ON(ft.lang_id = l.id) 
GROUP BY f.id, f.name, l.name; 
+0

这确实是正确的答案。谢谢。我会将你的答案标记为〜8分钟:) –