2010-11-15 78 views
2

您好我想尝试排序一个字段与多个订单,例如这里是我的表mysql排序多个命令中的单个字段

第1条规则是按状态排序。按照以下顺序:活动,非活动,合并,促销A,促销B,促销C,促销D,免费

在这些类别中的每个类别中排序后,第二条规则如下:传统,本机, ,AMM,导航

第三规则是由这些类别按字母AZ

下的国家进行排序,如果我不能做到这一点在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); 
+0

发布数据库问题的好例子,我没有问题的复制和粘贴,并在1秒内创建表ond – ajreal 2010-11-15 12:06:46

+0

确实很简单:) – Edmhs 2010-11-15 12:10:01

回答

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; 
+0

如果我有一个空记录,记录会先来,如果我有一个匹配的情况下,这将是问题,这些不是状态,我有很多,但我只是想与这些排序 – r1400304 2010-11-15 12:14:51

+0

@livetolearn:ic,你可以使用默认的9999为空记录,我更新SQL来说明 – ajreal 2010-11-15 12:18:07

+0

谢谢老兄真棒查询和很大的帮助 – r1400304 2010-11-15 12:37:16