给出表格:
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”的项目,然后显示那些不相关的项目。
答案 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个条件中的任何一个,则可以确定它将被排序与最后一组。