标题:
无限分类&树型论坛的实现(数据库)
[打印本页]
作者:
cnangel
时间:
2004-5-18 15:50
标题:
无限分类&树型论坛的实现(数据库)
数据表参考:
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` )
);
#sortid 类别编号
#main 根分类
#parentid 父ID
#layer 分类等级
#orders 排列顺序
复制代码
主要函数,用于添加分类时用,根分类除外:
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);
}
}
复制代码
$x_db 所用到的数据库类:
/*****
// +-------------------------------------------------
// | Id: vbf_db.php
// +-------------------------------------------------
// | Copyright (c)
// | Author:Arvan
// +-------------------------------------------------
// | Create Date: 2003-6-23
// | Modify Date:
// | Note:
// | 数据库操作的类
// |
// |
// +-------------------------------------------------
*****/
class TDb{
var $host;
var $user;
var $password;
var $database;
var $n;
var $result="";
var $conn="";
var $debug = true;
var $errMsg = "";
function TDb($host,$user,$password,$database){
$this->host=$host;
$this->user=$user;
$this->password=$password;
$this->conn=@mysql_connect($host,$user,$password) or die("<br><br><b>Err:</b>SQL busy,please try again later!");
$this->set_db($database);
$this->errMsg ="";
$this->n = 0;
}
//end of func tdb
function exec($sql, $db_name = ''){
if (($db_name != '') && ($db_name != $this->database)){
$old_db = $this->database;
$this->set_db($db_name);
}
$this->n = 0;
$this->result=@mysql_query($sql,$this->conn);
if (mysql_error() != ""){
$this->errMsg = mysql_error();
if ($this->debug){
echo "<br><br><b>Err:</b>Fail to execute this SQL query:$sql<br><br>$this->errMsg";
}else{
echo "<br><br><br><b>Err:</b>Please check the query is normal and make sure that It's allowed!";
}
exit;
}
$this->n = @mysql_affected_rows();
if($old_db != ''){
$this->set_db($old_db);
}
return true;
}
function get_data(){
if($this->result==""){
echo "<br><br><b>Err:</b>There is no result please run method exec(\$sql) first";
exit;
}
$count=0;
while($row=mysql_fetch_array($this->result)){
$data[$count]=$row;
$count++;
}
mysql_free_result($this->result);
return $data;
}
//end of func get_data
function get_ins_id(){
return mysql_insert_id();
}
function free(){
mysql_close($this->conn);
}
function set_db($db_name){
if($db_name != $this->database){//select new table while they are different
@mysql_select_db($db_name) or die("<br><b>Err:</b>Fail to select $db_name table, make sure it's allowed to do this!");
$this->database=$db_name;
}
return true;
}
function get_cur_db(){
return $this->database;
}
}
//End of class db
复制代码
欢迎光临 星星博客 (http://commerce.huhoo.net/)
Powered by Discuz! 7.0.0