返回列表 回复 发帖

无限分类&树型论坛的实现(数据库)

数据表参考:
  1. CREATE TABLE `mf_sort` (
  2. `sortid` SMALLINT( 3 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
  3. `main` TINYINT( 2 ) UNSIGNED NOT NULL ,
  4. `parentid` SMALLINT( 3 ) UNSIGNED NOT NULL ,
  5. `layer` SMALLINT( 3 ) UNSIGNED NOT NULL ,
  6. `orders` TINYINT( 2 ) UNSIGNED NOT NULL ,
  7. `sort` VARCHAR( 100 ) NOT NULL ,
  8. PRIMARY KEY ( `sortid` ) ,
  9. INDEX ( `main` , `parentid` , `layer` , `orders` )
  10. );
  11. #sortid 类别编号
  12. #main  根分类
  13. #parentid 父ID
  14. #layer 分类等级
  15. #orders 排列顺序
复制代码
主要函数,用于添加分类时用,根分类除外:
  1. function get_main_layer_orders($parentid)
  2. {
  3.     global $x_db;
  4.     $sql  = "select `main`, `layer`, `orders` ";
  5.     $sql .= "from `mf_sort` ";
  6.     $sql .= "where `postid`='$parentid'";
  7.     $x_db->exec($sql);
  8.     $data   = $x_db->get_data();
  9.     $layer  = $data[0]['layer']+1;
  10.     $main   = $data[0]['main'];
  11.     $orders = $data[0]['orders'];
  12.     $sql  = "select `sortid` from `mf_sort` ";
  13.     $sql .= "where `parentid`='$parentid'";
  14.     $x_db->exec($sql);
  15.     $n = $x_db->n;
  16.     if ($n>0)
  17.     {
  18.         $lastid = $parentid;
  19.         get_lastid($lastid);
  20.         $sql    = "select `orders` from `mf_sort` ";
  21.         $sql   .= "where `sortid`='$lastid'";
  22.         $x_db->exec($sql);
  23.         $data   = $x_db->get_data();
  24.         $orders = $data[0][0];
  25.         $sql    = "update `mf_sort` ";
  26.         $sql   .= "set `orders`=`orders`+1 ";
  27.         $sql   .= "where `orders`>$orders and `main`='$main'";
  28.         $x_db->exec($sql);
  29.         $orders = $orders + 1;
  30.         return array($main, $layer, $orders);
  31.     }
  32.     else
  33.     {
  34.         $sql    = "update `mf_sort` ";
  35.         $sql   .= "set `orders`=`orders`+1 ";
  36.         $sql   .= "where `orders`>$orders and `main`='$main'";
  37.         $x_db->exec($sql);
  38.         return array($main, $layer, $orders+1);
  39.     }
  40. }
  41. //取得最后一个有效sortid
  42. function get_lastid(&$parentid)
  43. {
  44.     global $x_db;
  45.     $pre  = $parentid;
  46.     $sql  = "select max(`sortid`) as `id` ";
  47.     $sql .= "from `mf_sort` ";
  48.     $sql .= "where `parentid` = '$parentid'";
  49.     $x_db->exec($sql);
  50.     $data = $x_db->get_data();
  51.     $id   = $data[0]['id'];
  52.     if (empty($id))
  53.     {
  54.         $parentid = $pre;
  55.     }
  56.     else
  57.     {
  58.         $parentid = $id;
  59.         get_lastid($parentid);
  60.     }
  61. }
复制代码
$x_db 所用到的数据库类:
  1. /*****
  2. // +-------------------------------------------------
  3. // | Id: vbf_db.php                                 
  4. // +-------------------------------------------------
  5. // | Copyright (c)  
  6. // | Author:Arvan
  7. // +-------------------------------------------------
  8. // | Create Date: 2003-6-23
  9. // | Modify Date:
  10. // | Note:
  11. // |        数据库操作的类
  12. // |
  13. // |
  14. // +-------------------------------------------------
  15. *****/
  16. class TDb{
  17.         var $host;
  18.         var $user;
  19.         var $password;
  20.         var $database;
  21.         var $n;
  22.         var $result="";
  23.         var $conn="";
  24.         var $debug = true;
  25.         var $errMsg = "";
  26.         function TDb($host,$user,$password,$database){
  27.                 $this->host=$host;
  28.                 $this->user=$user;
  29.                 $this->password=$password;
  30.                 $this->conn=@mysql_connect($host,$user,$password) or die("<br><br><b>Err:</b>SQL busy,please try again later!");
  31.                
  32.                 $this->set_db($database);
  33.                 $this->errMsg ="";
  34.                 $this->n = 0;
  35.         }
  36.         //end of func tdb
  37.         function exec($sql, $db_name = ''){
  38.                 if (($db_name != '') && ($db_name != $this->database)){
  39.                         $old_db = $this->database;
  40.                         $this->set_db($db_name);
  41.                 }
  42.                 $this->n = 0;
  43.                 $this->result=@mysql_query($sql,$this->conn);
  44.                 if (mysql_error() != ""){
  45.                         $this->errMsg = mysql_error();
  46.                         if ($this->debug){
  47.                                 echo "<br><br><b>Err:</b>Fail to execute this SQL query:$sql<br><br>$this->errMsg";
  48.                         }else{
  49.                                 echo "<br><br><br><b>Err:</b>Please check the query is normal and make sure that It's allowed!";
  50.                         }
  51.                         exit;
  52.                 }
  53.                 $this->n = @mysql_affected_rows();
  54.                 if($old_db != ''){
  55.                         $this->set_db($old_db);
  56.                 }
  57.                 return true;
  58.         }
  59.         function get_data(){
  60.                 if($this->result==""){
  61.                         echo "<br><br><b>Err:</b>There is no result please run method exec(\$sql) first";
  62.                         exit;
  63.                 }
  64.                 $count=0;
  65.                 while($row=mysql_fetch_array($this->result)){
  66.                         $data[$count]=$row;
  67.                         $count++;
  68.                 }
  69.                 mysql_free_result($this->result);
  70.                 return $data;
  71.         }
  72.         //end of func get_data
  73.         function get_ins_id(){
  74.                 return mysql_insert_id();
  75.         }
  76.         function free(){
  77.                 mysql_close($this->conn);
  78.         }
  79.         function set_db($db_name){
  80.                 if($db_name != $this->database){//select new table while they are different
  81.                         @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!");
  82.                         $this->database=$db_name;
  83.                 }
  84.                 return true;
  85.         }
  86.         function get_cur_db(){
  87.                 return $this->database;
  88.         }
  89. }
  90. //End of class db
复制代码

                     我是一个呼吸着现在的空气而生活在过去的人
               这样的注定孤独,孤独的身处闹市却犹如置身于荒漠
                                     我已习惯了孤独,爱上孤独
                                 他让我看清了自我,还原了自我
                             让我再静静的沉思中得到快乐和满足
                                   再孤独的世界里我一遍又一遍
                                   不厌其烦的改写着自己的过去
                                             延伸到现在与未来
                                       然而那只是泡沫般的美梦
                                 产生的时刻又伴随着破灭的到来
                         在灰飞烟灭的瞬间我看到的是过程的美丽
                                      而不是结果的悲哀。。。
返回列表