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