概述
之前用django做模糊查询的时候,总结研究的,如何在模糊查询过程中,进行排序,全匹配放在最前面,这里使用的是sql的case when语句
先建表,为了演示,表就从简
CREATE TABLE `user` (
`id` varchar(20) NOT NULL,
`name` varchar(20) DEFAULT NULL,
PRIMARY KEY (`id`)
) ;
插入几条数据
insert into user values(1,'张三');
insert into user values(2,'五张三');
insert into user values(3,'张三五');
insert into user values(4,'王五张三');
insert into user values(5,'王张三五');
方法一:
使用orm的Case When函数
case = Case(
When(name=query_key, then=1),
When(name__endswith=query_key, then=2),
When(name__startswith=query_key, then=3),
When(name__contains=query_key, then=4),
default=5,
output_field=CharField()
)
user = model.User.objects.filter(name__contains=query_key).annotate(
pos=case).order_by('pos')
方法二:
使用 raw 手动sql方式
models.User.objects.raw("select * ,"
"(case "
"when name=%s then 1 "
"when name like %s then 2 "
"when name like %s then 3 "
"when name like %s then 4 "
"else 5 end) AS pos "
"from user where name "
"like %s and name "
"order by pos",
[query_key, '{}%%'.format(query_key),
'%%{}'.format(query_key), '%%{}%%'.format(query_key),
"%%{}%%".format(query_key)])
因为之前在网上一直找不到,只找到纯sql的方式,就是使用case when,然而找不到django的有关这方面的,无奈自己研究出的方法,如果有错请指出,共同学习和进步
最后
以上就是勤恳小白菜为你收集整理的django模糊查询排序,全匹配放最前面的全部内容,希望文章能够帮你解决django模糊查询排序,全匹配放最前面所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复