#mysql #sql #database
Вопрос:
Я пытаюсь понять, возможно ли это.
У меня есть три столбца (ИМЯ, ТИП, РЕЙТИНГ).
Я пытаюсь понять, могу ли я выполнить group_concat и расположить ячейки таким образом.
ПРИМЕР ТАБЛИЦЫ
| NAME | TYPE | RATING | user_id
------------- ------ ---------- ---------
Hello World1 | Text1 | Star1 | 1
Hello World1 | Text1 | Star1 | 1
Hello World2 | Text2 | Star2 | 2
Hello World2 | Text2 | Star2 | 2
Hello World2 | Text2 | Star2 | 2
Hello World3 | Text3 | Star3 | 3
Hello World3 | Text3 | Star3 | 3
Hello World4 | Text4 | Star4 | 4
Hello World4 | Text4 | Star4 | 4
Я хочу расположить результаты следующим образом, где все сгруппировано в одну строку, сгруппируйте идентификатор пользователя
ПРИМЕР ОДНОЙ СТРОКИ
NAME: Hello World1, TYPE: Text1, RATING: Star1,
NAME: Hello World1, TYPE: Text1, RATING: Star1,
NAME: Hello World2, TYPE: Text2, RATING: Star2,
NAME: Hello World2, TYPE: Text2, RATING: Star2,
NAME: Hello World2, TYPE: Text2, RATING: Star2,
NAME: Hello World3, TYPE: Text3, RATING: Star3,
NAME: Hello World3, TYPE: Text3, RATING: Star3,
NAME: Hello World4, TYPE: Text4, RATING: Star4,
NAME: Hello World4, TYPE: Text4, RATING: Star4
Я знаю, если я сделаю это:
concat('NAME: ',group_concat(name separator ' : '),
' TYPE: ',group_concat(type separator ' : '),
' RATING: ',group_concat(rating separator ' : ')
),
Я возьму это.
ПРИМЕР B
NAME: Hello World, Hello World, Hello World, Hello World, Hello World
TYPE: Text, Text,Text,Text,Text,
RATING: Star,Star,Star,Star,Star,
Есть какие-нибудь идеи о том, как я могу выполнить ПРИМЕР А? Есть также идентификаторы пользователей, которые одинаковы, поэтому я пытаюсь сгруппировать их все в одну строку для импорта.
Комментарии:
1. Это не три таблицы, это одна таблица с тремя столбцами.
2. @Бармар, упс, тип-О, я имел в виду три колонки.
3. Вам нужна простая конкатенация полей.
Ответ №1:
Поместите все столбцы в один GROUP_CONCAT()
, не вкладывайте их внутрь CONCAT()
. Это объединит все значения из одной строки, а затем объединит их все по user_id
.
Используйте SEPARATOR 'n'
, чтобы поместить каждый элемент в новую строку.
SELECT GROUP_CONCAT('NAME: ', name, ', TYPE: ', type, ', RATING: ', rating SEPARATOR ',n')
FROM yourTable
GROUP BY user_id
Комментарии:
1. Да, извините, у меня действительно есть несколько строк в группе, сгруппированных по идентификатору пользователя. Вот почему я использовал grou_concat
2. Пожалуйста, обновите вопрос. Покажите несколько идентификаторов пользователей во входных данных и то, как вы хотите, чтобы каждый из них был сгруппирован в результате.
3. Готово, я обновил вопрос с помощью идентификатора пользователя
4. Где в результате группируется идентификатор пользователя?
5. Это помогло бы, если бы у вас не было одинаковых значений в каждой строке, чтобы мы могли видеть, как выходные данные связаны с входными данными.