2015-02-10 102 views
1

我有這個查詢,它將搜索一些新聞,並返回新聞數據作爲其組,公司和類別。事情是一個新聞可以有很多公司和組,我需要將這個結果(grupoNome和empresaNome)在每個字段中連接起來,因此使得這個查詢只返回一行:連接MySql結果

這是我的'普通'查詢結果:

id titulo categoriaId url  categoriaNome  grupoNome empresaNome 
5 Teste 1   teste "Todas as Notícas" "Group 1" Company 1 
5 Teste 1   teste "Todas as Notícas" "Group 1" Company 2 
5 Teste 1   teste "Todas as Notícas" "Group 1" Company 3 
5 Teste 1   teste "Todas as Notícas" "Group 1" Company 4 
5 Teste 1   teste "Todas as Notícas" "Group 2" Company 1 
5 Teste 1   teste "Todas as Notícas" "Group 2" Company 2 
5 Teste 1   teste "Todas as Notícas" "Group 2" Company 3 
5 Teste 1   teste "Todas as Notícas" "Group 2" Company 4 
5 Teste 1   teste "Todas as Notícas" "Group 3" Company 1 
5 Teste 1   teste "Todas as Notícas" "Group 3" Company 2 
5 Teste 1   teste "Todas as Notícas" "Group 3" Company 3 
5 Teste 1   teste "Todas as Notícas" "Group 3" Company 4 

這是我的查詢:

SELECT n.*, nc.nome AS categoriaNome, g.nome AS grupoNome, e.nome AS empresaNome FROM `noticias` n 
INNER JOIN `noticiascategorias` nc ON n.categoriaId = nc.id 
INNER JOIN `noticiasgrupos` ng ON n.id = ng.noticiaId 
INNER JOIN `grupos` g ON g.id = ng.grupoId 
INNER JOIN `noticiasempresas` ne ON n.id = ne.noticiaId 
INNER JOIN `empresas` e ON e.id = ne.empresaId 
WHERE n.url LIKE 'teste'; 

noticiasgrupos/noticiasempresas包含新聞集團/公司多對多relantionship。

grupos/empresas包含組/公司信息。

編輯:

我會需要的結果是這樣的:

5 Teste 1 teste "Todas as Notícas" "Group 1_Group2_Group_3" "Company 1_Company_Company_3" 

除數可以是任何東西,我以後可以用它來分割(| _ *)

+0

你想要結果看起來像什麼? – Tom 2015-02-10 19:34:56

+0

@Tom對不起,忘了解釋這個零件 – Terkhos 2015-02-10 19:37:08

+1

不好主意:如果你打算晚些時候分手,那麼請不要在第一時間開口。如果你堅持這樣做,然後看看[group_concat()](http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_group-concat) – 2015-02-10 19:42:35

回答

2

您可以使用GROUP_CONCAT來做到這一點。只需將您的GROUP BY設置爲您想要分組的任何內容即可。您也可以爲GROUP_CONCAT指定排序順序和分隔符。

SELECT n.*, nc.nome AS categoriaNome, 
     GROUP_CONCAT(DISTINCT g.nome ORDER BY g.nome ASC SEPARATOR '_') AS grupoNome, 
     GROUP_CONCAT(DISTINCT e.nome ORDER BY g.nome ASC SEPARATOR '_') AS EmpresaNome 
FROM `noticias` n 
INNER JOIN `noticiascategorias` nc ON n.categoriaId = nc.id 
INNER JOIN `noticiasgrupos` ng ON n.id = ng.noticiaId 
INNER JOIN `grupos` g ON g.id = ng.grupoId 
INNER JOIN `noticiasempresas` ne ON n.id = ne.noticiaId 
INNER JOIN `empresas` e ON e.id = ne.empresaId 
WHERE n.url LIKE 'teste' 
GROUP BY n.id; 
+0

謝謝,它像一個魅力:D – Terkhos 2015-02-10 19:57:21

+0

太棒了!看起來我可以用兩種不同的語言編寫查詢。 :) – Tom 2015-02-10 20:46:45

+0

確實可以! :) – Terkhos 2015-02-10 21:09:18