多语言展示
当前在线:1789今日阅读:84今日分享:32

mysql多字段排序及指定某字段顺序排序问题

数据库查询结果根据三个字段排序。依次为main_flag,confirm_state,form_id ;main_flag在数据库表中可能的值为:0,1,null;confirm_state 在数据库表中的能值为:3,4,6,7,8依次代表3、已通过,4.终止,6.运行,7.挂起,8完成;form_id :这个是对应表的主键。一开始sql关键语句如下:SELECTa.form_id,CASE a.confirm_stateWHEN 3 THEN'未启动'WHEN 4 THEN'废止'WHEN 6 THEN'运行'WHEN 7 THEN'挂起'WHEN 8 THEN'完成'ELSE''END AS confirm_state,ifnull(a.main_flag, 0)AS main_flagFROMbas_formdata aORDER BYFIELD(IFNULL(a.main_flag, 2),1,0,2) ,FIELD(a.confirm_state, 6, 7, 3, 8, 4) ,a.form_id DESC查询结果:始终有两条数据未按照设定的顺序排列。在main_flag不为1的情况下 运行应该排在未启动前面。改后sql :SELECTa.form_id,CASE a.confirm_stateWHEN 3 THEN'未启动'WHEN 4 THEN'废止'WHEN 6 THEN'运行'WHEN 7 THEN'挂起'WHEN 8 THEN'完成'ELSE''END AS confirm_state,ifnull(a.main_flag, 0)AS main_flagFROMbas_formdata aORDER BYFIELD(IFNULL(a.main_flag, 0),1,0) ,FIELD(a.confirm_state, 6, 7, 3, 8, 4) ,a.form_id DESC结果:数据成功按照预想顺序排列。总结:排序字段与查询字段对null处理不一致导致数据库表执行的时候指向异常。导致错误。
推荐信息