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 ответа

В этой таблице отсутствует общий столбец (PK) для сортировки в group_concat.

ID | GroupID | 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.

Если вы хотите значения в определенном порядке, то используйте order by:

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;

В общем, SQL имеет дело с неупорядоченными множествами. Если вы хотите, чтобы вещи были в определенном порядке, вам нужно явно указать порядок.

Другие вопросы по тегам