MySQL搜索权重对结果的影响

3

数据库条目

表 test

 name
========================
 Sunae Kasimov
 Obsop Natty
 Preem Kuman

MySQL查询

select * 
from test 
where name like 'na%' or 
      name like '% na%' or 
      name like '%na%';

按顺序返回1然后2,但我想按顺序返回2和1。也就是说,想要更重视'%na%'而不是'% na%'

在mysql中有没有办法实现这个?


1
你如何衡量搜索的“权重”? - John Woo
结果中带有“% na%”的应该排在“%na%”之上,这是我想要加权结果的方式。 - amitchhajer
2个回答

2
select * from 
(
select * from name where name like '% na%'
union
select * from name where name like 'na%'
union
select * from name where name like '%na%'
) a

2

你应该在select语句中创建一个虚拟字段,并按照它进行排序。例如:

select test.*,
case when name like '% na%'
         then 1
     else 2
end as OrderField
from test 
where name like 'na%' or 
      name like '% na%' or 
      name like '%na%'
order by OrderField

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接