2011-09-14 8 views
2

私は同じLEFT JOINからのデータと異なるgroup_concatを使用するMySQLクエリを作成しようとしています。テーブルの例:group_concat何回ですか?

車のテーブル carid | license_plate

タイヤテーブル(中古タイヤを意味する) carid |モデル|幅

これらの表から、私はタイヤモデルの幅で分類されたリストを取得したいと考えています。考えられる幅は2種類あり、カーカードページからロードしています。

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を欺く(または放棄する)必要があるかもしれません。

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

ソリューションの両方が素晴らしいです:

代わりに、と(第3サイズがこれまでに追加された場合、あなたのSQLを変更する必要がないと)バック2つの行を取得することができます!おそらく2番目の方がよりエレガントで、ついには私が使うものですが、もっと具体的で状況によってはより良いこともあるので、最初から注意を払います。 MySQLのエラーを防ぐために、「END」の後

私は「モデルとしてCASE」を削除しなければならなかった仕事をする最初の方法については

SELECT名、205はそれまでにELSE NULL ENDのORDERをモデル GROUP_CONCAT(CASE幅width_205、 GROUP_CONCAT ELSE(CASE幅225 THENモデルモデルによってNULL ENDオーダー)のようなモデル) LEFT名前でcars.carid = tires.carid carid = '10' 基上のタイヤをJOINカーからwidth_225、 として

また、CASEの前にDISTINCTを追加しました。group_conc反復を避けるために、で。

2番目の方法では、文の最後に「ORDER BY幅ASC」を追加しただけです。このメソッドが必要な人は、mysql_fetch_(何でも)がすでにgroup_concatの最初のケースを含む最初の結果を取得することを忘れないでください。

ありがとうございます! CU