Нужна помощь в возврате дубликатов из соединения в одну строку с включенной функцией суммы

У меня есть две таблицы t1 и t2. t1 содержит некоторые данные сообщения, которые я настроил для поиска по t2, который содержит список ключевых слов с их индивидуальной оценкой. Теперь я добился умеренного успеха, и мне удалось вернуть все строки в t1, которые содержат любое ключевое слово в t2, с этим запросом.

SELECT DISTINCT t1.RowID, t1.ChatNo, t1.UserNo, 
t1.Chat, t2.Keywords, SUM(t2.KeywordScore) AS Score
FROM t1
LEFT JOIN t2 ON t1.Chat LIKE CONCAT('%', + t2.Keywords , + '%')
WHERE t2.Keywords IS NOT NULL OR t1.ChatNo > 0 AND t1.UserNo > 0
GROUP BY t1.RowID, t2.Keywords

Теперь моя проблема в том, что он возвращает повторяющиеся результаты, если в сообщении чата есть несколько ключевых слов, и в каждой повторяющейся строке оно выбирает другое ключевое слово и этот рейтинг ключевых слов. Теперь из-за этого я считаю, что мой запрос пытается суммировать строки по отдельности, поэтому не могу их суммировать (поправьте меня, если я ошибаюсь). Например:

RowID  ChatNo  UserNO         Chat        Keywords   Score

  1      1       1     "...ex1 ex2 ex3"     ex1        2
  1      1       1     "...ex1 ex2 ex3"     ex2        4
  1      1       1     "...ex1 ex2 ex3"     ex3        1

Теперь я бы хотел, чтобы он возвращал все ключевые слова, найденные в сообщении, в одной строке (или списке) и по-прежнему имел возможность СУММИРОВАТЬ значения ключевых слов, найденных в сообщении, и отображать итоговую сумму, например:

RowID  ChatNo  UserNO         Chat          Keywords      Score

  1      1       1     "...ex1 ex2 ex3"   ex1, ex2, ex3     7

Я немного искал и тестировал, но на самом деле не нашел решения, которое помогло бы мне. Поэтому, если кто-нибудь может оказать мне некоторую помощь в том, как я могу продолжить, и получить запрос для вывода результатов в одной строке с суммированной оценкой, я был бы очень признателен.

Освоение архитектуры микросервисов с 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
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
17
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Вам нужно использовать GROUP_CONCAT ()

Также distinct не кажется необходимым, поэтому я удалил его.

Попробуй это:

SELECT t1.RowID, t1.ChatNo, t1.UserNo, 
t1.Chat, group_concat(t2.Keywords, ', '), SUM(t2.KeywordScore) AS Score
FROM t1
LEFT JOIN t2 ON t1.Chat LIKE CONCAT('%', + t2.Keywords , + '%')
WHERE t2.Keywords IS NOT NULL OR t1.ChatNo > 0 AND t1.UserNo > 0
GROUP BY t1.RowID, t1.ChatNo, t1.UserNo, t1.Chat

Большое вам спасибо, ему просто нужен SEPARATOR в разделе group_concat в SELECT.

DapperGentleman55 10.04.2018 17:37

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