mysql在多个订单中排序单个字段

时间:2010-11-15 11:40:19

标签: php mysql

嗨我想尝试用多个订单对字段进行排序,例如这里是我的表

第一条规则是按状态排序。按以下顺序:活跃,非活动,合并,促销A,促销B,促销C,促销D,已解散

在这些类别中按照以下顺序对它们进行排序后,遵循以下顺序的第二条规则:传统,原生,救赎,Amm,导航

第3条规则是按国家排序按类别按字母A-Z

排序

如果我不能在mysql中执行此操作,那么我可以在php中执行此操作吗?使用排序功能

我只是需要一个想法或技巧我可以做到这一点,谢谢你的帮助

-- ----------------------------
-- Table structure for `users`
-- ----------------------------
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
  `user_id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `status` varchar(255) DEFAULT NULL,
  `category` varchar(255) DEFAULT NULL,
  `state` varchar(255) DEFAULT NULL,
  PRIMARY KEY (`user_id`)
) ENGINE=MyISAM AUTO_INCREMENT=11 DEFAULT CHARSET=utf8;

-- ----------------------------
-- Records of users
-- ----------------------------
INSERT INTO users VALUES ('1', 'testing', 'Inactive', 'Traditional', 'AZ');
INSERT INTO users VALUES ('2', 'testing 2', 'Merged', 'Native', 'AK');
INSERT INTO users VALUES ('3', 'testing 3', 'Promo A', 'Salvation', 'DC');
INSERT INTO users VALUES ('4', 'testing 4', 'Promo B', 'Salvation', 'PH');
INSERT INTO users VALUES ('5', 'testing 5', 'Promo C', 'Amm', 'PO');
INSERT INTO users VALUES ('6', 'testing 6', 'Promo D', 'Mai', 'AZ');
INSERT INTO users VALUES ('7', 'testing 7', 'Defunct', 'Nav', 'AK');
INSERT INTO users VALUES ('8', 'test 8', null, 'ABc', 'Dd');
INSERT INTO users VALUES ('9', 'test 9', 'asd', null, null);
INSERT INTO users VALUES ('10', 'test 10', 'Active - Full Membership', null, null);

2 个答案:

答案 0 :(得分:2)

用例

select 
  *
from
  users
order by
(
case status
  when 'Active'   then 1
  when 'Inactive' then 2
  when 'Merged'   then 3
  when 'Promo A'  then 4
  when 'Promo B'  then 5
  when 'Promo C'  then 6
  when 'Promo D'  then 7
  when 'Defunct'  then 8
  else 9999
end
),
(
case category
  when 'Traditional' then 1
  when 'Native'      then 2
  when 'Salvation'   then 3
  when 'Amm'         then 4
  when 'Nav'         then 5
  else 9999
end
), state;

答案 1 :(得分:1)