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 имеет дело с неупорядоченными множествами. Если вы хотите, чтобы вещи были в определенном порядке, вам нужно явно указать порядок.