需要帮助返回重复从一个连接到一个包含和函数的单行

hts6caw3  于 2021-06-24  发布在  Mysql
关注(0)|答案(1)|浏览(237)

我有两张tablet1和t2。t1包含一些消息数据,我已经设置好要对t2进行搜索,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

我做了一些搜索和测试,但没有找到一个对我有效的解决方案。因此,如果有人能给我一些帮助,我可能会继续,并让查询输出的结果在一个单一的分数总结行将不胜感激。

gkl3eglg

gkl3eglg1#

您需要使用组\u 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

相关问题