Выберите из списка смежности и порядок снизу вверх - PullRequest
0 голосов
/ 14 ноября 2010

Учитывая следующую структуру таблицы:

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 ;

можно было бы запросить его таким образом, чтобы потомки возвращались первыми (снизу вверх).

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

Цель состоит в том, чтобы загрузить их в метод addRole Zend_Acl, который требует добавления ролей перед добавлением дочернего элемента.

Мой текущий метод является неоптимальным (и, вероятно, неправильным), который требует 2 запросов.Один для получения всех конечных узлов (где родитель имеет значение NULL), а другой для получения узлов с родителями, заказанными родителем (DESC).

Любая помощь всегда ценится.

Ответы [ 2 ]

2 голосов
/ 14 ноября 2010

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

0 голосов
/ 14 ноября 2010

Вот ответ по безопасности на основе ролей, который я дал некоторое время назад, который может помочь: Написание запроса наследования, написанного на SQL, с использованием внутреннего соединения?

Полный сценарий здесь: http://pastie.org/1213230

...