我正在寻找拒绝的解决方案。 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/