【问题标题】:MySQL Finding Substring Matches and Group by Match Full WordMySQL 查找子字符串匹配并按匹配全字分组
【发布时间】: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 但这会返回完整的帖子,我正在寻找一种方法只返回找到子字符串的单词,而不是全文帖子。

标签: mysql sql search find match


【解决方案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 FiddleINSTR() function

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      猜你喜欢
      • 2014-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-01
      • 2017-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多