优点无需要使用递归或字符建象形树,速度快。
表格构
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了,道理是一样的。