问题场景
在一次写业务的过程中,发现在使用 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'))
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。