0

次のテーブル構造があるとします。

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 つのクエリを必要とする準最適 (そしておそらく間違っている) です。1 つはすべてのリーフ ノード (親が NULL の場合) を取得するためのもので、もう 1 つは親 (DESC) によって順序付けられた親を持つものを取得するためのものです。

どんな助けでも大歓迎です。

4

2 に答える 2

2

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

于 2010-11-14T19:36:45.693 に答える
0

これが役立つかもしれないロールベースのセキュリティの回答です:内部結合を使用してSQLで書かれた継承クエリを書く?

完全なスクリプトはこちら: http://pastie.org/1213230

于 2010-11-14T20:07:34.850 に答える