gpt4 book ai didi

Mysql 对多个 LIKE 进行排序

转载 作者:行者123 更新时间:2023-11-29 13:40:19 25 4
gpt4 key购买 nike

有很多关于排序的主题(例如: Order Results By Occurrence ),但这些都是针对一个值的。

我有一个人们使用关键字的搜索字段;只是说生成的查询如下所示:

1个字:

SELECT * 
FROM `meta`
WHERE (`keywords` LIKE '%bike%')

2个字:

SELECT * 
FROM `meta`
WHERE (
`keywords` LIKE '%bike%'
OR `keywords` LIKE '%yellow%'
)

等等...

我想做的是根据最常找到的关键字对结果进行排序。对于未知数量的关键字 LIKE's

,我该如何执行此操作

最佳答案

以下是 MySQL 中按关键字匹配数量排序的一般方法(使用 like):

SELECT * 
FROM `meta`
ORDER BY ((`keywords` LIKE '%bike%') +
(`keywords` LIKE '%yellow%') +
. . .
) desc;

如果您想处理灵活数量的关键字,那么您应该使用适当的关系数据结构。将关键字存储在单个字段中(可能以逗号分隔)并不是最好的方法。您应该有一个单独的表,每个关键字一行。

编辑:

要添加找到的关键字数量,可以将表达式放入 select 语句中:

SELECT m.*,
((`keywords` LIKE '%bike%') +
(`keywords` LIKE '%yellow%') +
. . .
) as NumKeywordsFound
FROM `meta` m
ORDER BY NumKeywordsFound desc;

您还可以添加 having 子句来指定至少找到一个:

SELECT m.*,
((`keywords` LIKE '%bike%') +
(`keywords` LIKE '%yellow%') +
. . .
) as NumKeywordsFound
FROM `meta` m
HAVING NumKeywordsFound > 1
ORDER BY NumKeywordsFound desc;

如果您想查找某个关键字在每个表达式中出现的次数:

 select m.*,
length(replace(keywords, 'bike', 'bike1')) - length(keywords) as NumBikes,
length(replace(keywords, 'yellow', 'yellow1')) - length(keywords) as NumYellows
FROM `meta` m

关于Mysql 对多个 LIKE 进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18164578/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com