我有一个工单表,其中有一个 status 的字段,值有: commit 、 replied 、 transfer 、 solved...
现在有个需求是按照 commit 、 transfer 、 replied 、 solved 状态,再按照提交时间 created_at ,对工单进行排序展示。
解决方案目前想到有两个:
1 、添加一列专用于排序,感觉代价略大。
2 、在 status 的值前面添加前缀,例如 0_commit, 1_transfer 、 3_replied 、 4_solved...
这样直接 order by status, created_at 也可以满足需求。
但我在想有没有直接能解决需求的方案而不用改动数据库数据呢?
我使用的 py Django 框架, Orm 查询数据。 请大家不吝赐教。谢谢
1
mifly 2016-11-11 11:52:40 +08:00 via iPhone
Status 记录数字,代码中把数字映射成字符返回前端展现
|
2
INW017bzMfgkkYGn 2016-11-11 12:18:11 +08:00
status 用数字比较好,既能满足排序需求,还提高性能。
|
3
aprikyblue 2016-11-11 12:21:27 +08:00 via Android
所以。。当初谁设计的 status 保存字符串。。
|
4
longggg OP @mifly @default 懂了, 谢谢。按照 0 : commit, 1 : transfer 、 3 : replied 、 4 : solved 做映射。
@aprikyblue 我接手别人的项目😂。我自己也还是一个小兵,所以有很多没考虑到,现在遇到问题了才来逐步解决。 |
5
xinyewdz 2016-11-11 18:07:08 +08:00 via Android
以后有需求,改变状态的排序。然后楼主就哭了。
|
6
longggg OP @xinyewdz 是的,所以我又查了查资料。
mysql 的 field 方法满足情况。最棒的答案。 奉上链接: http://stackoverflow.com/questions/8322849/mysql-order-by-specific-id-values Django 的实现例子: Model.objects.extra(select={'status': "FIELD(status, 'commit', 'transfer', 'replied', 'solved')"}, order_by=['status', '-time_updated']) perfect! 结贴! |