问题场景

在一次写业务的过程中,发现在使用 sql 查询数据的时候,不是按照我希望的顺序进行排序的,而是根据系统顺序进行排序的.o(╥﹏╥)o

SELECT * FROM table_name WHERE id in (3,4,1,2)

我以为不加ORDER BY进行排序也会根据给定的顺序输出数据,太想当然了!

自定义查询

  • FIELD
  • INSTR
  • LOCATE
# FIELD
SELECT * FROM table_name WHERE id in (3,4,1,2) ORDER BY FIELD (需要排序的字段,自定义的顺序)

# 根据 id 进行排序,自定义的顺序为 2,3,1,4
SELECT * FROM table_name WHERE id in (3,4,1,2) ORDER BY FIELD (id,2,3,1,4)

# INSTR
# 按照 id 的 2,4,1,3 顺序进行排序
SELECT * FROM table_name WHERE id in (3,4,1,2) ORDER BY INSTR('2,4,1,3',id)

# LOCATE
SELECT * FROM table_name WHERE id in (1,2,3,4) ORDER BY LOCATE(id,'2,4,3,1')

peewee 中使用自定义排序

# SQL 函数可以拼接 sql 语句
from peewee import SQL
# ids是一个 list
ids= [2,3,4,1]
str_ids = ",".join(ids)
query = MyModel.select().where(MyModel.id << ids).order_by(SQL('field(id,%s) % str_ids'))

好好学习
7 声望2 粉丝

文章是自己在学习或踩到坑的过程中查找资料的总结,以便后期自己复习使用