这是在 MySQL 中按关键字匹配数排序的一般方法(使用like
):
SELECT *
FROM `meta`
ORDER BY ((`keywords` LIKE '%bike%') +
(`keywords` LIKE '%yellow%') +
. . .
) desc;
如果要处理灵活数量的关键字,则应使用适当的关系数据结构。存储keywords
在单个字段中(可能以逗号分隔)不是最好的方法。您应该有一个单独的表,每个关键字一行。
编辑:
要添加找到的关键字的数量,可以将表达式放在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