我正在尝试使用不同的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。
好的,感谢阅读,我会等待你的答案。提前谢谢!
答案 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