php - 怎么算没有。 mysql 中一列中的确切关键字出现次数

标签 php mysql regex string

我正在寻找拒绝的解决方案。 mysql 列中确切关键字出现的次数。

由于这是“多关键字搜索”功能所需要的,因此可以有单个或多个关键字。

我找到了非常好的解决方案,如下所示,但它不计入包含关键字而不是计入精确关键字。

SELECT 
in_member_id,
st_jsondata,    
ROUND (   
    (
        LENGTH(st_jsondata)
        - LENGTH( REPLACE ( st_jsondata, "John", "") ) 
    ) / LENGTH("John")        
)
+
ROUND (   
    (
        LENGTH(st_jsondata)
        - LENGTH( REPLACE ( st_jsondata, "Seipelo", "") ) 
    ) / LENGTH("Seipelo")        
)
AS count1 FROM tbl_member_master Having count1 > 0 ORDER BY count1 DESC LIMIT 0, 10

解决方案的问题是它搜索“John”、“John123”、“JohnAb”等。第二个关键字相同。我不希望这样。

如果我能得到类似正则表达式替换函数的东西,它对我有用。

如果有人遇到与此问题相关的问题,请分享。

Search Keyword: sonal, khunt

Column Data:
ID | ColumnToSearch
1 | {'st_first_name':'sonal','st_last_name':'khunt'}
2 | {'st_first_name':'sonal105','st_last_name':'khunt105'}
3 | {'st_first_name':'sonal109','st_last_name':'khunt109'}
4 | {'st_first_name':'sonal','st_last_name':'patel'}


Expected Result:
ID | Count
1 | 2
2 | 0
3 | 0
4 | 1

谢谢。

最佳答案

您可以使用 REGEXP 的单词边界将 where 过滤器添加到您的查询中:

SELECT 
in_member_id,
st_jsondata,    
ROUND (   
    (
        LENGTH(st_jsondata)
        - LENGTH( REPLACE ( st_jsondata, "John", "") ) 
    ) / LENGTH("John")        
)
+
ROUND (   
    (
        LENGTH(st_jsondata)
        - LENGTH( REPLACE ( st_jsondata, "Seipelo", "") ) 
    ) / LENGTH("Seipelo")        
)
AS count1 FROM tbl_member_master WHERE st_jsondata REGEXP '[[:<:]](John|Seipelo)[[:>:]]' Having count1 > 0 ORDER BY count1 DESC LIMIT 0, 10

这只会找到那些字符串像 John 而不是 John123 的记录并替换.. 这样你就可以得到准确的计数。

关于php - 怎么算没有。 mysql 中一列中的确切关键字出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30165220/

相关文章:

java - Android:从 MySQL 检索数据

python - 从 MySQL DB 中的 python 中的一个字段获取值

javascript - 我们如何使用 Regex 验证 CSR 的格式

java - 用于分割字符串同时忽略括号内容的正则表达式

有效网站链接的正则表达式

php - mysql 数据库连接

php - 如何从 php 调用 ruby​​ 脚本?

php - Laravel 更新要求在保存到数据库之前填写所有输入

mysql - 使用用户输入查询 MySQL 数据库并移至下一页或显示错误

mysql - 更新多个表中的公共(public)字段