MySQL 查找子字符串匹配并按匹配全字分组

Posted

技术标签:

【中文标题】MySQL 查找子字符串匹配并按匹配全字分组【英文标题】:MySQL Finding Substring Matches and Group by Match Full Word 【发布时间】:2018-08-06 19:59:38 【问题描述】:

使用 mysql 时,我找不到该表达式的正确术语组合。

在我的语句中使用 php 用户输入变量,我需要找到部分子字符串匹配并按完整匹配词分组

以输入示例 "#bea" 我想在全文帖子中查找匹配 "#bea" 作为子字符串,然后分组并计算整个单词它匹配的地方例如 "#beat""#beauty""#beast"

数据库中的示例帖子

Testing Post #beat #beauty

Another test #beauty #beast

Testing #boom #beast

我想搜索一个子字符串,例如“#bea”

并有输出

Match   | Count
#beast  | 2
#beauty | 2
#beat   | 1

这可以用 MySQL 完成,还是我更好地找到匹配项并使用 PHP 算法计算完整的单词?

【问题讨论】:

GROUP BY、LIKE、COUNT() 等 我可以使用 LIKE 和 GROUP BY 但这会返回完整的帖子,我正在寻找一种方法只返回找到子字符串的单词,而不是全文帖子。 【参考方案1】:

试试这个:

SELECT A.word `Match`, COUNT(B.sentence) `Count`
FROM 
(SELECT '#beast' word UNION ALL
SELECT '#beauty' word UNION ALL
SELECT '#beat' word) A LEFT JOIN Sentence B
ON INSTR(B.sentence,A.word)>0
GROUP BY A.word
ORDER BY  `Count` DESC, A.word;

请参阅 DEMO on SQL Fiddle 和 INSTR() function。

【讨论】:

【参考方案2】:

您可以使用以下查询来查找每个单词的计数。

SELECT
sum(INSTR( '#beast' , TABLE.COL) > 0) '#beast',
sum(INSTR( '#beauty' , TABLE.COL) > 0) '#beauty'
FROM
TABLE

然后您可以根据需要进行数据透视表; MySQL pivot table

【讨论】:

以上是关于MySQL 查找子字符串匹配并按匹配全字分组的主要内容,如果未能解决你的问题,请参考以下文章

Elasticsearch:查找子字符串匹配

在 .NET 中查找子字符串匹配的结尾

跨多个候选项查找多个子字符串的最佳匹配

python --- 正则表达式

查找重叠子串的多个匹配项

查找其键与子字符串匹配的字典项