Представление MySQL со значениями строк, объединенными, упорядоченными и сгруппированными в столбец

У меня есть таблица обзоров товаров, которая выглядит так:

**ReviewID**  **ReviewerID**  **ReviewText**   **Category**  **ItemID**  **date_time**

 01           1212            good product      Mobile     1           23/Apr/2022
 02           1233            will buy again    fruit      2           24/Apr/2022
 03           1245            not recommended   Mobile     1           25/Apr/2022
 04           1236            not ripe          fruit      2           22/Apr/2022

Я хочу создать представление, которое выбирает ReviewID, ReviewText и новый столбец с именем tReviews, в котором все обзоры одной и той же категории и ItemID объединены и упорядочены по дате и времени.

Представление должно дать такие результаты для приведенной выше таблицы:

**ReviewID**   **ReviewText**   **tReviews**

  01           good product     25/Apr/2022  1  not recommended
                                23/Apr/2022  1  good product

  02           will buy again   24/Apr/2022  2  will buy again
                                22/Apr/2022  2  not ripe

  03           not recomended   25/Apr/2022  1  not recommended
                                23/Apr/2022  1  good product
 
  04           not ripe         24/Apr/2022  2  will buy again
                                22/Apr/2022  2  not ripe

В снежинке я бы использовал Listagg для столбца AllReviews, как я могу получить тот же результат для MySQL.

буду признателен за помощь

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
1
0
59
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В MySQL вы можете использовать GROUP_CONCAT следующим образом:

CREATE VIEW my_view AS
(
  SELECT T.ReviewID, T.ReviewText, D.tReviews
  FROM table_name T JOIN
  (
    SELECT Category, ItemID,
      GROUP_CONCAT(CONCAT(date_time, ' ', ItemID, ' ', ReviewText) ORDER BY date_time DESC SEPARATOR '\n') tReviews
    FROM table_name
    GROUP BY Category, ItemID
  ) D
  ON T.Category = D.Category AND
     T.ItemID = D.ItemID
)

Смотрите демо.

Спасибо, Ахмед, я думаю, что ваш ответ почти готов, но я хотел бы сгруппировать по категории и идентификатору элемента и хотел бы, чтобы самый последний обзор по дате и времени в AllReviews отображался первым (в порядке убывания).

Azee. 17.12.2022 22:43

Вы можете проверить обновленный ответ.

ahmed 17.12.2022 22:50

Это работает, я принимаю ответ.

Azee. 17.12.2022 22:52

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