2017-03-31 8 views
0

は、私は、次の表があると値:私はのようなクエリを使用する場合MySQLのGROUP_CONCAT再配置は

ID|Col1 |Col2 
1 |Test1 |Test12 
2 |Test2 |Test22 
2 |Test3 |Test32 

SELECT GROUP_CONCAT(Col1) as First, GROUP_CONCAT(Col2) as Second WHERE ID=2 GROUP BY ID 

それは時々GROUP_CONCATの再配置を返します。

ID|First  |Second 
2 |Test2,Test3|Test32,Test22 

私はそれを返すことを期待するだろうが:たとえば、あなたが見ることができるように

ID|First  |Second 
2 |Test2,Test3|Test22,Test32 

、それは「第2」という名前の列に連結された値を切り替えます。これを防ぐ方法を教えてください。その後、

+0

'GROUP_CONCAT(Col2 ORDER BY Col2)'を使用してください。 'GROUP_CONCAT'によって返された注文は、SQLテーブルに固有の順序がないので、* arbitray *です。 –

+0

注文はどこで指定しましたか? –

+0

@BoundaryImposition私はGROUP_CONCATがrow1、row2、row3などのような見つかった行を追加して返すと仮定していましたが、明らかにそれはありません –

答えて

1

あなたが特定の順序で値をしたい場合は、order by使用:順不同セットで一般的な、SQL取引で

SELECT GROUP_CONCAT(Col1 ORDER BY Col1) as First, 
     GROUP_CONCAT(Col2 ORDER BY col2) as Second 
FROM t 
WHERE ID = 2 
GROUP BY ID; 

を。あなたが特定の順序で物事を望むなら、明示的に順序を指定する必要があります。

+0

これは、列内の値がA-B-C A-B-Cのような同じ整列構造を有すると仮定してのみ動作する。それがA-B-C B-A-Cの場合、それは正しく失敗するでしょうか? –

+0

@TVAvanHesteren。 。 。アルファベット順に正規の順序で値を返します。順序を指定する別の列がある場合は、その列を 'ORDER BY'で使用できます。 –

+0

私が達成したいのは、CONCAT_GROUP Col2がこれまで達成できなかったCONCAT_GROUP Col1と同じ順序で値を返すことです。私は自分のリストの両方でCol2、Col1のCol1、Col1のCol1のようにCol1で両方とも整理しようとしました。しかし、返されたグループのインデックスに見つかった行と一致しません。 –

1

このテーブルには、group_concatでソートする共通列(PK)がありません。

ID |グループID |のCol1 | Col2に

1 | 1 | Test1を| TEST12

2 | 2 | Test2を| Test22

3 | 2 | Test3は| Test32

SELECT GROUP_CONCAT(Col1 ORDER BY ID) as First, 
     GROUP_CONCAT(Col2 ORDER BY ID) as Second 
FROM t 
WHERE GroupID = 2 
GROUP BY GroupID; 

これは、col1とcol2のグループ連結の順序を保持します。

+0

はい、ただし、別の列を追加するオプションはありません。 GROUP_CONCAT内のオーダーの+1は、可能であることを認識していませんでした –