优点无需要使用递归或字符建象形树,速度快。
表格构
CREATE TABLE menus (id INT( 10 ) UNSIGNED NOT NULL AUTO_INCREMENT ,mainid INT( 10 ) UNSIGNED NOT NULL ,parentid INT( 10 ) UNSIGNED NOT NULL ,order FLOAT UNSIGNED NOT NULL ,level SMALLINT( 5 ) UNSIGNED NOT NULL ,info VARCHAR( 128 ) NOT NULL ,
INDEX ( mainid , parentid , order , level ) ,
UNIQUE (id
)
) TYPE = MYISAM ;
//添加根类
mainid = lasted mainid + 1
parentid = 0
order = 0
level = 0
//添加子类
取得父类A_id A_mainid A_parentid A_order A_level
取得同父同级别下最后一个order
SELECT L_order FROM menus where parentid = A_id ;
if ( L_order == NULL ) L_order = A_order ;
取得与父类id同级但order处于父类之后的第一个类别的order
SELECT B_order FROM menus WHERE parentid = A_parentid AND order < A_order ;
if ( B_order == NULL ) //表明添加的子类是排最后的一个
{
new_order = ceil ( L_order + 1 ) ;
}
else
{
new_order = number_format( ( L_order + B_order )/2 , 14 );
}
// 输出
SELECT * FROM menus ORDER BY mainid ASC , order ASC ;
以上是菜单的表示方法。
如果是要实现树型 论坛 的话,其中的mainid便是主题id了,道理是一样的。