我是靠谱客的博主 勤恳小白菜,最近开发中收集的这篇文章主要介绍django模糊查询排序,全匹配放最前面,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

之前用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模糊查询排序,全匹配放最前面所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部