我将简化我的问题以便解释它。
我有一个包含用户发布的文本消息的表和另一个包含关键字的表。
- 我想为每个用户显示在短信中找到关键字的次数。
- 如果在短信中找不到关键字,我不希望结果显示关键字。
- 我不希望它不区分大小写。所有关键字都降低了,但在消息中,您可以找到较低和较高的字符。
因为我不确定我的解释是否足够清楚,所以 SQLFiddle 来了。 http://sqlfiddle.com/#!2/c402a
希望任何人都可以帮助我。
我将简化我的问题以便解释它。
我有一个包含用户发布的文本消息的表和另一个包含关键字的表。
因为我不确定我的解释是否足够清楚,所以 SQLFiddle 来了。 http://sqlfiddle.com/#!2/c402a
希望任何人都可以帮助我。
我找到了我要找的东西。这对我来说并不容易,但这是我的查询:
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
建议不要尝试通过查询来解决这个问题。可以编写一个查询来执行此操作,这样的查询将分别扫描每个关键字的消息表,并产生一个计数(或您可以分组的行),但这不会扩展,或者在某种意义上是可靠的的语言搜索。
以下是您可能想要做的事情:
如果您试图解决必须对现有数据执行上述操作的问题,您可以手动执行此操作,只需先建立该 t_keyword_count 表(取决于您总共有多少关键字,但即使有很多,这可以编写脚本)。但是您应该将 t_msg.msg_text 字段更改(或镜像)为适合文本搜索的字段,并使用 SQL 文本搜索功能来查找关键字。