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 查找子字符串匹配并按匹配全字分组的主要内容,如果未能解决你的问题,请参考以下文章