цикл для объединения групп в MYSQL

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