mysql - 如何使用mysql查找文本中出现的关键字并按其排序?
问题描述
例如,假设关键字是“东京餐厅”,我有 Place 表中的 PlaceDescription 列,其中 PlaceID=1 的 PlaceDescription 是“XXXXX 是一家美丽的东京餐厅”。PlaceID=2 的 PlaceDescription 是“YYYYY 是一家受欢迎的印度餐厅”。PlaceID=3 的 PlaceDescription 是“ZZZZZ 是东京的一家快餐店”。PlaceID=4 的 PlaceDescription 是“AAAAA 是一家位于东京的成功餐厅。它是一家始建于 2000 年的餐厅。”
我希望它返回就像
PlaceID 计数
1 2
2 1
3 2
4 2
我尝试访问诸如MySql 之类的链接上的主题:计算单词在列中出现的次数,但它们没有回答我的问题。
SELECT PlaceID, COUNT(*) FROM Place WHERE PlaceDescription LIKE '%tokyo%' or PlaceDescription LIKE '%restaurant%';
解决方案
您可以尝试对当前LIKE
表达式求和。我建议REGEXP
改用:
SELECT
PlaceID,
(PlaceDescription REGEXP '[[:<:]]tokyo[[:>:]]') +
(PlaceDescription REGEXP '[[:<:]]restaurant[[:>:]]') AS Count
FROM Place
WHERE
PlaceDescription REGEXP '[[:<:]]tokyo|restaurant[[:>:]]';
请注意,我正在对\btokyo\b
or进行正则表达式搜索\brestaurant\b
,这意味着REGEXP
只会找到那些确切的单词,并被两边的单词边界包围。另请注意,REGEXP
它不区分大小写,因此两者tokyo
和Tokyo
都会被拾取并计算在内。
推荐阅读
- javascript - article.createdAt.toLocalDateString 不是函数
- python-3.x - __init__.py 中的 google.cloud 命名空间导入错误
- java - Pircbotx 通道 setMode() 在 main() 方法中不起作用
- excel - 需要在 excel 中使用动态范围的特定集群的 unqiue VM 总数
- java - 如何使用 mapstructs 中的列表将列表映射到对象
- google-sheets - 将表格公式调整 +1 行 -- A 列中的 ('SheetX'!$A3) --> B 列中的 ('SheetX'!$A4)
- c - 将数组的大小定义为用户合法输入的变量吗?
- javascript - 尝试更改图表画布的高度和宽度
- java - 如何在 Eclipse Juno 中添加 Junit 5 库?
- c++ - 将给定类型的任何枚举作为函数参数传递