2010-11-14 22 views
0

Compte tenu de la structure de tableau suivant:Sélectionner dans la liste de contiguïté et de bas en haut

CREATE TABLE IF NOT EXISTS `roles` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(32) NOT NULL, 
    `description` varchar(255) NOT NULL, 
    `parent` int(11) unsigned DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `uniq_name` (`name`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=0 ; 

serait-il possible de l'interroger de telle sorte où les enfants sont retournés en premier (de bas en haut).

1, user,  Login privileges, granted after account confirmation, 17 
2, admin,  Administrative user, has access to everything.,  NULL 
15, unverified, Users who have not validated their email address,  NULL 
16, verified, Users who have validated their email address,   NULL 
17, guest,  A guest role, an anonymous visitor with no account, NULL 
18, moderator, Role for doing staff duties,       1 

L'objectif est de charger dans la méthode addRole de Zend_Acl qui nécessite rôles ont été ajoutés avant d'ajouter un enfant.

Ma méthode actuelle est sous-optimale (et probablement incorrecte) qui nécessite 2 requêtes. Un pour obtenir tous les nœuds feuilles (où le parent est NULL) et un autre pour obtenir ceux avec les parents ordonnés par le parent (DESC).

Toute aide est toujours très appréciée.

Répondre

2

ORDER BY (parent IS NOT NULL) ASC, parent DESC

+0

Bonne réponse et appris quelque chose de nouveau aujourd'hui. Je vous remercie. –