我正在做一个项目,需要用户搜索特定类别的产品。这些产品有标签,如:t恤、套头衫、帽子,我目前正在显示按喜欢数量排序的结果。下面是我的sql语句:
SELECT *
FROM products
WHERE keywords LIKE '%$query%'
ORDER BY likes DESC LIMIT 50;
但问题是,如果有人搜索了“hat”,但数据库中更流行的词是“chatterbox”,那么它会首先找到这个词,因为它有更多的喜好。
因此,将其放在伪代码中:
SELECT *
FROM products
WHERE keywords LIKE '%$query%'
ORDER BY "BEST MATCH" LIMIT 50;
理想的结果是:
2结果:
帽子:26个喜欢,
chatterbox:234喜欢,
而不是:
2结果:
chatterbox:234喜欢,
帽子:26个喜欢,
有没有办法做到这一点?
2条答案
按热度按时间vpfxa7rd1#
在
ORDER BY
子句首先检查是否存在精确匹配或(如果需要)keywords
开始于'$query'
:bvpmtnay2#
您可以尝试以下方法:
使用第一个查询,您可以得到精确的匹配,而使用第二个查询,其他查询则按照喜欢的顺序进行匹配。