JOIN正在复制GROUP_CONCAT内容

时间:2015-03-03 16:54:42

标签: mysql

我有这个问题:

SELECT 
projetos.id_projeto, 
projetos.projeto AS projeto, 
projetos.descricao AS descricao, 
projetos.thumb, 
GROUP_CONCAT(imagens.imagem ORDER BY imagens.ordem ASC) AS imagens, 
GROUP_CONCAT(imagens.largura ORDER BY imagens.ordem ASC) AS larguras, 
GROUP_CONCAT(imagens.altura ORDER BY imagens.ordem ASC) AS alturas, 
GROUP_CONCAT(premios.id_premio) AS premio 
FROM projetos 
JOIN imagens ON projetos.id_projeto = imagens.id_projeto
JOIN premios ON premios.id_projeto = projetos.id_projeto 
WHERE projetos.id_projeto = 44
GROUP BY projetos.id_projeto 

但它重复了图像,larguras,alturas和premio内容。

我尝试在GROUP_CONCAT中使用DISTINCT。但是有些宽度值相等,每张图像需要一个宽度。

http://sqlfiddle.com/#!2/c3756f/5

1 个答案:

答案 0 :(得分:1)

Here it is

SELECT 
projetos.id_projeto, 
projetos.projeto AS projeto, 
projetos.descricao AS descricao, 
projetos.thumb, 

imgs.*,

prem.premio

FROM projetos 

JOIN (
  SELECT id_projeto,
    GROUP_CONCAT(imagem ) AS imagens, 
    GROUP_CONCAT(largura ) AS larguras, 
    GROUP_CONCAT(altura ) AS alturas
  FROM imagens
  GROUP BY id_projeto
  ) imgs ON projetos.id_projeto = imgs.id_projeto
JOIN (
  SELECT id_projeto,
    GROUP_CONCAT(premios.id_premio) AS premio 
  FROM premios 
  GROUP BY id_projeto
  ) as prem ON prem.id_projeto = projetos.id_projeto 

WHERE projetos.id_projeto = 44

GROUP BY projetos.id_projeto ;