gpt4 book ai didi

search - 如何根据搜索词匹配的数量对结果进行排序?

转载 作者:行者123 更新时间:2023-11-29 15:04:38 24 4
gpt4 key购买 nike

我在 mysql 中使用以下 InnoDB 表来描述可以有多个与之关联的搜索标签的记录:

TABLE records
ID
title
desc

TABLE searchTags
ID
name

TABLE recordSearchTags
recordID
searchTagID

为了根据任意搜索输入选择记录,我有一个看起来像这样的语句:

SELECT 

recordSearchTags.recordID

FROM

recordSearchTags

LEFT JOIN searchTags

ON recordSearchTags.searchTagID = searchTags.ID

WHERE

searchTags.name LIKE CONCAT('%','$search1','%') OR
searchTags.name LIKE CONCAT('%','$search2','%') OR
searchTags.name LIKE CONCAT('%','$search3','%') OR
searchTags.name LIKE CONCAT('%','$search4','%');

我想对此结果集进行排序,以便与更多搜索词匹配的行显示在与更少搜索词匹配的行前面。

例如,如果一行与所有 4 个搜索词匹配,它将位于列表顶部。仅匹配 2 个搜索词的行将位于中间的某个位置。仅匹配一个搜索词的行将位于末尾。

关于什么是最好的方法有什么建议吗?

谢谢!

最佳答案

* 替换答案,因为无法选择全文

好吧,这并不漂亮,但你应该能够做这样的事情:

ORDER BY (searchTags.name LIKE CONCAT('%','$search1','%') 
+ searchTags.name LIKE CONCAT('%','$search2','%')
+ searchTags.name LIKE CONCAT('%','$search3','%')
+ searchTags.name LIKE CONCAT('%','$search4','%'))
DESC;

LIKE 在匹配时返回 1 ,如果没有匹配则返回 0 ,因此您应该能够将结果加在一起。

关于search - 如何根据搜索词匹配的数量对结果进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2427778/

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