Mysql使用浮点型字段排序法实现无限分类(树型论坛)

优点无需要使用递归或字符建象形树,速度快。

表格构
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了,道理是一样的。

Published At
Categories with 数据库类
Tagged with
comments powered by Disqus