我正在创建一个搜索函数,并接受一个输入参数,并使用以下查询查询我的数据库:
select * from people where title like '{param}%' or title like '%{param}%';
我的问题是,这将返回所有的记录,因为他们的意思,但我想排序的结果,以便where语句的"标题",如"{param}%"的结果首先返回,然后是下面的where语句。
有什么办法可以做到吗?
试试:
select * from people where title like '{param}%' or title like '%{param}%'
ORDER BY CASE when title like '{param}%' then 0
when title like '%{param}%' then 1 end asc
我会这样写:
select *
from people
where title like '{param}%' or title like '%{param}%'
order by (title like '{param}%') + (title like '%{param}%') desc;
MySQL将布尔值结果作为整数处理,以便您可以将它们加在一起。显然,如果某项以{param}
开头,那么它也包含它,因此它们的值将为2
。