2010-11-15 57 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