倍数顺序或查询顺序会影响相关性吗?

时间:2020-06-10 11:05:40

标签: mysql

给出表格:

items(id)

标签(id,名称,文本)

itemtags(itemid,tagid)

select id 
  from items t1
  join itemstags t2 
    on t1.id = t2.itemid
  join tags t3 
    on t2.tagid = t3.id 
 where t3.name = '$tag' 
    or t3.name like '%$tag%' 
    or t3.text like '%$tag%' 

搜索tag =人时

我看到标记为的项目的混合结果

人,命令,手动,超人,很多...

我的问题是我该如何显示最相关的项目,即那些首先标记为“ man”的项目,然后显示那些不相关的项目。

1 个答案:

答案 0 :(得分:2)

如果条件在where子句中的顺序:

t3.name = '$tag' or t3.name like '%$tag%' or t3.text like '%$tag%'

定义相关性,然后您可以使用条件排序:

order by t3.name = '$tag' desc,
         t3.name like '%$tag%' desc,
         t3.text like '%$tag%' desc

最相关的行排在最前面。

实际上,您可以省略最后一部分:t3.text like '%$tag%' desc,因为这3种情况是结果中唯一存在的情况,并且如果某行不满足前2个条件中的任何一个,则可以确定它将被排序与最后一组。