2011-09-14 25 views
2

我正在嘗試使用不同的group_concat與來自同一個左連接的數據進行MySQL查詢。示例表格可以是:group_concat多次?

汽車表 carid |牌照

輪胎表(指用過的輪胎) 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

您並未在任何字段上進行分組,因此無法使用group_concat。 –

回答

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 
0

這兩種解決方案是偉大的!也許第二個更優雅,最後是我將要使用的那個,但是我會從第一個中注意到,因爲它更具體,可以在某些情況下更好。

對於第一種方法來工作,我有 「END」 之後刪除 「情況下的模型」,以防止MySQL的錯誤:

SELECT名字, GROUP_CONCAT(CASE寬度當205隨後進行建模ELSE NULL END ORDER BY模型)作爲width_205, GROUP_CONCAT(CASE WHEN寬度225 THEN ELSE建模NULL END ORDER BY模型)作爲width_225, FROM汽車 LEFT JOIN輪胎ON cars.carid = tires.carid WHERE carid = '10' GROUP BY名稱

我還在group_conc裏面的CASE之前添加了DISTINCT在,以避免重複。

對於第二種方法,我只在句子末尾添加了「ORDER BY width ASC」。對於任何可能需要此方法的人,請不要忘記,mysql_fetch_(無論什麼)已經取得包含group_concat的第一種情況的第一個結果。

非常感謝! CU