group_concat很多次?

时间:2011-09-14 16:03:08

标签: mysql left-join group-concat

我正在尝试使用不同的group_concat和来自同一LEFT JOIN的数据进行MySQL查询。示例表可以是:

汽车桌 carid | license_plate

轮胎表(指旧轮胎) carid |型号|宽度

从这些表中我想获得一个按宽度分类的轮胎模型列表,其中只有两种不同的可能宽度,我从车牌页面加载它。

 SELECT name, 
 if(width=205,group_concat(model ORDER BY model ASC),'') as width_205,
 if(width=225,group_concat(model ORDER BY model ASC),'') as width_225,
 FROM cars
 LEFT  JOIN tires ON cars.carid=tires.carid
 WHERE carid='10'

我希望我的解释清楚。这句话不能正常工作,我不知道是不是因为语法错误或我不能用这种方式使用group_concat。

好的,感谢阅读,我会等待你的答案。提前谢谢!

2 个答案:

答案 0 :(得分:0)

尝试

SELECT name, 
  GROUP_CONCAT(CASE width WHEN 205 THEN model ELSE NULL END CASE AS model ORDER BY model) as width_205,
  GROUP_CONCAT(CASE width WHEN 225 THEN model ELSE NULL END CASE AS model ORDER BY model) as width_225,
FROM cars
LEFT  JOIN tires ON cars.carid=tires.carid
WHERE carid='10'
GROUP BY name

得到你想要的东西。我没有MySQL方便测试。你可能不得不愚弄(甚至放弃)内部的ORDER BY。

或者,您可以返回两行(如果添加了第三个大小,则无需更改SQL):

SELECT name, width, GROUP_CONCAT(model ORDER BY model) AS Models
FROM cars
LEFT  JOIN tires ON cars.carid=tires.carid
WHERE carid='10'
GROUP BY name, width

答案 1 :(得分:0)

两种解决方案都很棒!也许第二个更优雅,最后它是我将使用的那个,但我也会从第一个开始注意,因为它更具体,在某些情况下会更好。

对于第一种工作方法,我必须在“END”之后删除“CASE AS model”以防止MySQL错误:

SELECT名称,       GROUP_CONCAT(CASE宽度为205,然后模型为ELSE NULL END ORDER BY模型)为width_205,       GROUP_CONCAT(CASE宽度为225那么模型ELSE NULL END ORDER BY模型)为width_225,     从汽车     LEFT JOIN轮胎ON cars.carid = tires.carid     在哪里carid = '10'     GROUP BY名称

我还在group_concat中的CASE之前添加了一个DISTINCT,以避免重复。

对于第二种方法,我只在句子末尾添加了“ORDER BY width ASC”。对于可能需要此方法的任何其他人,不要忘记mysql_fetch_(无论如何)已经获取包含group_concat第一个案例的第一个结果。

非常感谢! CU