按搜索查询的出现次数排序

时间:2019-04-25 20:30:04

标签: mysql

我想通过搜索查询在 title text 字段中的表中进行搜索,匹配次数最多的行将获胜。 我的表页面看起来像这样:

------------------------------------------
| id | title      | text        | status |
------------------------------------------
| 1  | test test  | test xx     | 200    |
| 2  | nothing    | nothing     | 200    |
| 3  | test test  | test test   | 200    |
| 4  | abcefgh    | ijkl test   | 200    |
| 5  | test       | test abc    | 200    |
------------------------------------------

预期结果如下所示(通过搜索查询 test 选择 id 标题文本),限制3):

---------------------------------
| id | title      | text        |
---------------------------------
| 3  | test test  | test test   |
| 1  | test test  | test xx     |
| 5  | test       | test abc    |
---------------------------------

非常感谢您的帮助,因为我现在找不到更长时间的解决方案。预先感谢!

1 个答案:

答案 0 :(得分:1)

您可以这样做:

select
  id, title, text
from t
order by 
  round(length(title) - length(replace(title, "test", "")) / length("test") + 
  round(length(text) - length(replace(text, "test", "")) / length("test")
  desc
limit 3