![]() |
|
首页 │ Apache │ Linux│ Java│ MySQL│ 注册│帮助 | |||
Mysql使用浮点型字段排序法实现无限分类(树型论坛)
Joe Teng (Joe_Teng@hotmail.com)
优点无需要使用递归或字符建象形树,速度快。
表格构
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了,道理是一样的。
Enjoy yourself.
Joe Teng
2005/6/12

