无限分类&树型论坛的实现

发表于:2007-07-01来源:作者:点击数: 标签:
数据表参考: 代码:-------------------------------------------------------------------------------- CREATE TABLE `mf_sort` ( `sortid` SMALLINT( 3 ) UNSIGNED NOT NULL AUTO_INCREMENT , `main` TINYINT( 2 ) UNSIGNED NOT NULL , `parentid` SMALLINT
数据表参考:

代码:--------------------------------------------------------------------------------
CREATE TABLE `mf_sort` (
`sortid` SMALLINT( 3 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
`main` TINYINT( 2 ) UNSIGNED NOT NULL ,
`parentid` SMALLINT( 3 ) UNSIGNED NOT NULL ,
`layer` SMALLINT( 3 ) UNSIGNED NOT NULL ,
`orders` TINYINT( 2 ) UNSIGNED NOT NULL ,
`sort` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `sortid` ) ,
INDEX ( `main` , `parentid` , `layer` , `orders` )
);
--------------------------------------------------------------------------------


关键的函数

PHP代码:--------------------------------------------------------------------------------
function get_main_layer_orders($parentid)
{
global $x_db;
$sql = "select `main`, `layer`, `orders` ";
$sql .= "from `mf_sort` ";
$sql .= "where `postid`=@#$parentid@#";
$x_db->exec($sql);
$data = $x_db->get_data();
$layer = $data[0][@#layer@#]+1;
$main = $data[0][@#main@#];
$orders = $data[0][@#orders@#];

$sql = "select `sortid` from `mf_sort` ";
$sql .= "where `parentid`=@#$parentid@#";
$x_db->exec($sql);
$n = $x_db->n;
if ($n>0)
{
$lastid = $parentid;
get_lastid($lastid);
$sql = "select `orders` from `mf_sort` ";
$sql .= "where `sortid`=@#$lastid@#";
$x_db->exec($sql);
$data = $x_db->get_data();
$orders = $data[0][0];
$sql = "update `mf_sort` ";
$sql .= "set `orders`=`orders`+1 ";
$sql .= "where `orders`>$orders and `main`=@#$main@#";
$x_db->exec($sql);
$orders = $orders + 1;
return array($main, $layer, $orders);
}
else
{
$sql = "update `mf_sort` ";
$sql .= "set `orders`=`orders`+1 ";
$sql .= "where `orders`>$orders and `main`=@#$main@#";
$x_db->exec($sql);
return array($main, $layer, $orders+1);
}
}

//取得最后一个有效sortid
function get_lastid(&$parentid)
{
global $x_db;
$pre = $parentid;
$sql = "select max(`sortid`) as `id` ";
$sql .= "from `mf_sort` ";
$sql .= "where `parentid` = @#$parentid@#";
$x_db->exec($sql);
$data = $x_db->get_data();
$id = $data[0][@#id@#];
if (empty($id))
{
$parentid = $pre;
}
else
{
$parentid = $id;
get_lastid($parentid);
}
}


原文转自:http://www.ltesting.net