mysql - 如何搜索关键字在两个表格之间的多个文本中出现的次数

标签 mysql sql

我有 2 个表,它们有以下列。

articles: id (PK), article (longtext), date (date)

keywords: id (PK), keyword (varchar)

目前我只能这样做,搜索一个硬关键字并显示该单词出现次数最多的文本:

SELECT * , MATCH (article) AGAINST ("keyword*" IN BOOLEAN MODE) AS relevance 
FROM `articles` 
WHERE MATCH (article) AGAINST ("keyword*" IN BOOLEAN MODE) ORDER BY relevance DESC LIMIT 10

如何搜索每个关键字(表:关键字)在每个文本(表:文章)中出现的次数?

我已经尝试过(我不知道是否可能?),但我得到“反对时的参数无效”:

SELECT keyword
FROM keywords
CROSS JOIN articles
WHERE MATCH (keywords.keyword)
        AGAINST (articles.article IN NATURAL LANGUAGE MODE)
<小时/>

编辑戈登·利诺夫:

Table : Keywords

Id     Keyword

1      first     
2      second   
3      text
4      keyword  

-

Table : Articles

Id     Article

1      the first text     
2      the second text   
3      text text text

期望的结果:

Keyword     score

text        5
first       1
second      1
keyword     0

最佳答案

将关键字存储在分隔字符串中是错误的存储方式。您应该有一个联结/关联表,每篇文章中的每个关键字占一行。

也就是说,有时我们会被其他人的非常非常糟糕的数据模型所困扰。如果这是您的数据模型,您应该花精力修复它而不是使用它。

但是,您可以通过一些字符串操作来做到这一点:

select kw.motcle,
       sum( (length(d.articles) -
             length(replace(d.articles, mc.motcle, '')
            ) / length(d.articles)
          ) as cnt
from test_motcle mc left join
     articles a
     on fin_in_set(mc.motcle, replace(d.articles, ' ', ',') > 0
group by mc.motcle
order by cnt desc;

关于mysql - 如何搜索关键字在两个表格之间的多个文本中出现的次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56324245/

相关文章:

mysql - 将单个数据库用于多位置 Rails 应用程序

mysql - 可以计算MySQL查询中两个日期时间字段之间的时间差吗?

mysql - 使用 Xampp 的 mysql for java jdbc 程序

php - 如何从不同的数据库中获取数据并将其保存到另一个数据库中

sql - NOT EXISTS 的替代方案

sql - 在 SQL 数据库中记录数据更改和用户事件的最佳方法是什么?

Java mysql - 它向我抛出一个 xml。 jdk/jre问题?

c# - 数据集上的动态 SQL

sql - 如何创建sql脚本来转储sql server表数据?

用于续写 orm 查询更改的 SQL