按“最佳匹配”sql排序结果

6psbrbz9  于 2021-09-29  发布在  Java
关注(0)|答案(2)|浏览(548)

我正在做一个项目,需要用户搜索特定类别的产品。这些产品有标签,如:t恤、套头衫、帽子,我目前正在显示按喜欢数量排序的结果。下面是我的sql语句:

  1. SELECT *
  2. FROM products
  3. WHERE keywords LIKE '%$query%'
  4. ORDER BY likes DESC LIMIT 50;

但问题是,如果有人搜索了“hat”,但数据库中更流行的词是“chatterbox”,那么它会首先找到这个词,因为它有更多的喜好。
因此,将其放在伪代码中:

  1. SELECT *
  2. FROM products
  3. WHERE keywords LIKE '%$query%'
  4. ORDER BY "BEST MATCH" LIMIT 50;

理想的结果是:
2结果:
帽子:26个喜欢,
chatterbox:234喜欢,
而不是:
2结果:
chatterbox:234喜欢,
帽子:26个喜欢,
有没有办法做到这一点?

vpfxa7rd

vpfxa7rd1#

ORDER BY 子句首先检查是否存在精确匹配或(如果需要) keywords 开始于 '$query' :

  1. SELECT *
  2. FROM products
  3. WHERE keywords LIKE '%$query%'
  4. ORDER BY keywords = '$query' DESC, -- 1st keywords with exact match
  5. keywords LIKE '$query%' DESC, -- 2nd keywords which start with '$query'
  6. likes DESC -- 3d likes
  7. LIMIT 50;
bvpmtnay

bvpmtnay2#

您可以尝试以下方法:

  1. (SELECT * FROM products WHERE keywords LIKE '$query')
  2. union
  3. (SELECT * FROM products WHERE keywords LIKE '%$query%' order by likes desc LIMIT 50);

使用第一个查询,您可以得到精确的匹配,而使用第二个查询,其他查询则按照喜欢的顺序进行匹配。

相关问题