2010-11-15 10 views
2

Salut, je suis en train de trier un champ avec plusieurs commandes par exemple ici est ma tablemysql tri champ unique dans plusieurs commandes

1ère règle est de trier selon le statut. dans l'ordre suivant: Actif, Inactif, Fusionné, Promo A, Promo B, Promo C, Promo D, Defunct

Une fois qu'ils sont triés comme ceci dans chacune de ces catégories la 2ème règle dans l'ordre suivant: Traditionnel, Native, Salut , Amm, Nav

3ème règle est de trier par l'Etat dans ces catégories par ordre alphabétique AZ

si je ne peux pas le faire dans MySQL afin que je peux le faire en php? avec fonction de tri

j'ai juste besoin d'une idée ou d'astuce comment je peux le faire grâce à l'aide

-- ---------------------------- 
-- 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

Bon exemple pour poster une question de base de données, je n'ai aucun problème à copier et coller, et créer la table en 1 sec – ajreal

+0

en effet façon facile :) – Edmhs

Répondre

2

cas d'utilisation

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

dans le cas où j'ai un enregistrement vide que l'enregistrement viendra en premier et si j'ai un cas de match qui sera problème pour ceux-ci ne sont pas le statut que j'ai beaucoup d'autres mais je veux juste trier avec ces – r1400304

+0

@livetolearn: ic, u peut utiliser un 9999 par défaut pour l'enregistrement vide, je mets à jour le SQL pour illustrer – ajreal

+0

merci mec requête impressionnante et une grande aide – r1400304