需要帮助将连接中的重复项返回到包含sum函数的单行

时间:2018-04-10 15:13:02

标签: mysql sql join phpmyadmin sum

我有两个表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

我已经做了一些搜索和测试,并没有真正遇到过对我有用的解决方案。因此,如果有人能就我如何继续提供一些帮助,并让查询将结果输出到一行,总结得分,那将非常感激。

1 个答案:

答案 0 :(得分: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