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

0

У меня две таблицы 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

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

Теги:
join
phpmyadmin
sum

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
  • 0
    Большое вам спасибо, просто нужен разделитель в разделе group_concat в SELECT.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню