首页 > 解决方案 > 如何使用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%';

标签: mysql

解决方案


您可以尝试对当前LIKE表达式求和。我建议REGEXP改用:

SELECT
    PlaceID,
    (PlaceDescription REGEXP '[[:<:]]tokyo[[:>:]]') +
    (PlaceDescription REGEXP '[[:<:]]restaurant[[:>:]]') AS Count
FROM Place
WHERE
    PlaceDescription REGEXP '[[:<:]]tokyo|restaurant[[:>:]]';

请注意,我正在对\btokyo\bor进行正则表达式搜索\brestaurant\b,这意味着REGEXP只会找到那些确切的单词,并被两边的单词边界包围。另请注意,REGEXP它不区分大小写,因此两者tokyoTokyo都会被拾取并计算在内。


推荐阅读