У меня две таблицы 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
Я сделал некоторые поиски и тестирование, на самом деле не нашел решения, которое сработало для меня. Поэтому, если кто-то может дать мне некоторую помощь в том, как я могу продолжить, и получить запрос для вывода результатов в одной строке с оценкой, подведя итог, было бы весьма полезно.
Вы должны использовать 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