计算关键字(在表格中)出现在另一个表格中的字段的次数

时间:2013-10-23 02:04:52

标签: mysql

我会简化我的问题以便解释它。

我有一个表格,其中包含用户发布的短信和另一个包含关键字的表格。

  • 我想为每个用户显示在短信中找到关键字的次数。
  • 如果在短信中找不到关键字,我不希望结果显示关键字。
  • 我不会感到胆怯。所有关键字都降低了,但在消息中,您可以找到更低的&上层人物。

因为我不确定我的解释是否足够清楚,所以SQLFiddle就出现了。 http://sqlfiddle.com/#!2/c402a

希望有人能帮助我。

2 个答案:

答案 0 :(得分:1)

我找到了我要找的东西。这对我来说并不容易,但这是我的疑问:

 SELECT t_msg.msg_usr, 
        t_list.list_word, 
        count(t_list.list_word),       
        t_msg.msg_text       
 FROM t_msg
 INNER JOIN t_list
 ON LOWER(t_msg.msg_text) LIKE CONCAT("%", t_list.list_word, "%")
 GROUP BY t_msg.msg_usr, t_list.list_word;

SQLFiddle在那里:http://sqlfiddle.com/#!2/ba052/8

答案 1 :(得分:0)

建议不要尝试使用查询解决此问题。可以编写一个查询来执行此操作,这样的查询将分别扫描每个关键字的消息表,并生成计数(或可以分组的行),但这不会扩展,或者在意义上是可靠的语言搜索。

以下是您可能想要做的事情:

  1. 创建一个表(user_id,keyword_id)映射到此用户的消息中此关键字的计数。我们称之为t_keyword_count。
  2. 每次收到消息时,在将消息保存到数据库之前,请搜索您关注的所有关键字(使用任何可用于拼写错误拼写的好文本搜索库等)。您应该知道此消息的(user_id)。
  3. 此时,您将准备好将消息添加到数据库中,并且将有一个(keyword_id)数组,其中包含此消息将包含的关键字。
  4. 在事务中,将消息插入t_msg表,并为(user_id,keyword_id)运行update / insert以使value = value + 1(或+ n,如果需要在同一个关键字中多次计算t_keyword_count表的相同消息。
  5. 如果您正在尝试解决现有数据必须执行上述操作的问题,您可以手动执行此操作,只是为了首先构建该t_keyword_count表(取决于您总共有多少个关键字,但即使有很多,这可以编写脚本)。但是您应该将t_msg.msg_text字段更改(或镜像)为适合文本搜索的字段,并使用SQL文本搜索功能查找关键字。