Arvan 发表于 2003-9-23 19:26
EHU中国域名交易资讯网无限分类&树型论坛的实现
数据表参考
EHU中国域名交易资讯网[code]
EHU中国域名交易资讯网CREATE TABLE `mf_sort` (
EHU中国域名交易资讯网`sortid` SMALLINT( 3 ) UNSIGNED NOT NULL AUTO_INCREMENT ,
EHU中国域名交易资讯网`main` TINYINT( 2 ) UNSIGNED NOT NULL ,
EHU中国域名交易资讯网`parentid` SMALLINT( 3 ) UNSIGNED NOT NULL ,
EHU中国域名交易资讯网`layer` SMALLINT( 3 ) UNSIGNED NOT NULL ,
EHU中国域名交易资讯网`orders` TINYINT( 2 ) UNSIGNED NOT NULL ,
EHU中国域名交易资讯网`sort` VARCHAR( 100 ) NOT NULL ,
EHU中国域名交易资讯网PRIMARY KEY ( `sortid` ) ,
EHU中国域名交易资讯网INDEX ( `main` , `parentid` , `layer` , `orders` )
EHU中国域名交易资讯网);
EHU中国域名交易资讯网EHU中国域名交易资讯网#sortid 类别编号
EHU中国域名交易资讯网#main 根分类
EHU中国域名交易资讯网#parentid 父ID
EHU中国域名交易资讯网#layer 分类等级
EHU中国域名交易资讯网#orders 排列顺序
EHU中国域名交易资讯网[/code]
EHU中国域名交易资讯网EHU中国域名交易资讯网主要函数,用于添加分类时用,根分类除外:
EHU中国域名交易资讯网[code]
EHU中国域名交易资讯网function get_main_layer_orders($parentid)
EHU中国域名交易资讯网{
EHU中国域名交易资讯网 global $x_db;
EHU中国域名交易资讯网 $sql = "select `main`, `layer`, `orders` ";
EHU中国域名交易资讯网 $sql .= "from `mf_sort` ";
EHU中国域名交易资讯网 $sql .= "where `postid`='$parentid'";
EHU中国域名交易资讯网 $x_db->exec($sql);
EHU中国域名交易资讯网 $data = $x_db->get_data();
EHU中国域名交易资讯网 $layer = $data[0]['layer']+1;
EHU中国域名交易资讯网 $main = $data[0]['main'];
EHU中国域名交易资讯网 $orders = $data[0]['orders'];
EHU中国域名交易资讯网EHU中国域名交易资讯网 $sql = "select `sortid` from `mf_sort` ";
EHU中国域名交易资讯网 $sql .= "where `parentid`='$parentid'";
EHU中国域名交易资讯网 $x_db->exec($sql);
EHU中国域名交易资讯网 $n = $x_db->n;
EHU中国域名交易资讯网 if ($n>0)
EHU中国域名交易资讯网 {
EHU中国域名交易资讯网 $lastid = $parentid;
EHU中国域名交易资讯网 get_lastid($lastid);
EHU中国域名交易资讯网 $sql = "select `orders` from `mf_sort` ";
EHU中国域名交易资讯网 $sql .= "where `sortid`='$lastid'";
EHU中国域名交易资讯网 $x_db->exec($sql);
EHU中国域名交易资讯网 $data = $x_db->get_data();
EHU中国域名交易资讯网 $orders = $data[0][0];
EHU中国域名交易资讯网 $sql = "update `mf_sort` ";
EHU中国域名交易资讯网 $sql .= "set `orders`=`orders`+1 ";
EHU中国域名交易资讯网 $sql .= "where `orders`>$orders and `main`='$main'";
EHU中国域名交易资讯网 $x_db->exec($sql);
EHU中国域名交易资讯网 $orders = $orders + 1;
EHU中国域名交易资讯网 return array($main, $layer, $orders);
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网 else
EHU中国域名交易资讯网 {
EHU中国域名交易资讯网 $sql = "update `mf_sort` ";
EHU中国域名交易资讯网 $sql .= "set `orders`=`orders`+1 ";
EHU中国域名交易资讯网 $sql .= "where `orders`>$orders and `main`='$main'";
EHU中国域名交易资讯网 $x_db->exec($sql);
EHU中国域名交易资讯网 return array($main, $layer, $orders+1);
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网}
EHU中国域名交易资讯网EHU中国域名交易资讯网//取得最后一个有效sortid
EHU中国域名交易资讯网function get_lastid(&$parentid)
EHU中国域名交易资讯网{
EHU中国域名交易资讯网 global $x_db;
EHU中国域名交易资讯网 $pre = $parentid;
EHU中国域名交易资讯网 $sql = "select max(`sortid`) as `id` ";
EHU中国域名交易资讯网 $sql .= "from `mf_sort` ";
EHU中国域名交易资讯网 $sql .= "where `parentid` = '$parentid'";
EHU中国域名交易资讯网 $x_db->exec($sql);
EHU中国域名交易资讯网 $data = $x_db->get_data();
EHU中国域名交易资讯网 $id = $data[0]['id'];
EHU中国域名交易资讯网 if (empty($id))
EHU中国域名交易资讯网 {
EHU中国域名交易资讯网 $parentid = $pre;
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网 else
EHU中国域名交易资讯网 {
EHU中国域名交易资讯网 $parentid = $id;
EHU中国域名交易资讯网 get_lastid($parentid);
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网}
EHU中国域名交易资讯网[/code]
EHU中国域名交易资讯网EHU中国域名交易资讯网演示:http://forum.2fs.cn/forumdisplay.php?forumid=1&tree=1
Arvan 发表于 2003-9-23 19:28EHU中国域名交易资讯网
利用orders控制顺序,添加分类时用递归,查询时直接输出不用递归。
重庆森林 发表于 2003-9-23 19:32EHU中国域名交易资讯网
不懂,帮忙T一下技术帖,落伍需要
Arvan 发表于 2003-9-23 20:09EHU中国域名交易资讯网
$x_db 所用到的数据库类
EHU中国域名交易资讯网[code]
EHU中国域名交易资讯网/*****
EHU中国域名交易资讯网// +-------------------------------------------------
EHU中国域名交易资讯网// | Id: vbf_db.php
EHU中国域名交易资讯网// +-------------------------------------------------
EHU中国域名交易资讯网// | Copyright (c)
EHU中国域名交易资讯网// | Author:Arvan
EHU中国域名交易资讯网// +-------------------------------------------------
EHU中国域名交易资讯网// | Create Date: 2003-6-23
EHU中国域名交易资讯网// | Modify Date:
EHU中国域名交易资讯网// | Note:
EHU中国域名交易资讯网// | 数据库操作的类
EHU中国域名交易资讯网// |
EHU中国域名交易资讯网// |
EHU中国域名交易资讯网// +-------------------------------------------------
EHU中国域名交易资讯网*****/
EHU中国域名交易资讯网EHU中国域名交易资讯网class TDb{
EHU中国域名交易资讯网 var $host;
EHU中国域名交易资讯网 var $user;
EHU中国域名交易资讯网 var $password;
EHU中国域名交易资讯网 var $database;
EHU中国域名交易资讯网EHU中国域名交易资讯网 var $n;
EHU中国域名交易资讯网 var $result="";
EHU中国域名交易资讯网 var $conn="";
EHU中国域名交易资讯网EHU中国域名交易资讯网 var $debug = true;
EHU中国域名交易资讯网 var $errMsg = "";
EHU中国域名交易资讯网EHU中国域名交易资讯网 function TDb($host,$user,$password,$database){
EHU中国域名交易资讯网 $this->host=$host;
EHU中国域名交易资讯网 $this->user=$user;
EHU中国域名交易资讯网 $this->password=$password;
EHU中国域名交易资讯网 $this->conn=@mysql_connect($host,$user,$password) or die("<br><br><b>Err:</b>SQL busy,please try again later!");
EHU中国域名交易资讯网 EHU中国域名交易资讯网 $this->set_db($database);
EHU中国域名交易资讯网EHU中国域名交易资讯网 $this->errMsg ="";
EHU中国域名交易资讯网 $this->n = 0;
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网 //end of func tdb
EHU中国域名交易资讯网EHU中国域名交易资讯网 function exec($sql, $db_name = ''){
EHU中国域名交易资讯网 if (($db_name != '') && ($db_name != $this->database)){
EHU中国域名交易资讯网 $old_db = $this->database;
EHU中国域名交易资讯网 $this->set_db($db_name);
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网 $this->n = 0;
EHU中国域名交易资讯网 $this->result=@mysql_query($sql,$this->conn);
EHU中国域名交易资讯网 if (mysql_error() != ""){
EHU中国域名交易资讯网 $this->errMsg = mysql_error();
EHU中国域名交易资讯网 if ($this->debug){
EHU中国域名交易资讯网 echo "<br><br><b>Err:</b>Fail to execute this SQL query:$sql<br><br>$this->errMsg";
EHU中国域名交易资讯网 }else{
EHU中国域名交易资讯网 echo "<br><br><br><b>Err:</b>Please check the query is normal and make sure that It's allowed!";
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网 exit;
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网 $this->n = @mysql_affected_rows();
EHU中国域名交易资讯网 if($old_db != ''){
EHU中国域名交易资讯网 $this->set_db($old_db);
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网 return true;
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网EHU中国域名交易资讯网 function get_data(){
EHU中国域名交易资讯网 if($this->result==""){
EHU中国域名交易资讯网 echo "<br><br><b>Err:</b>There is no result please run method exec(/$sql) first";
EHU中国域名交易资讯网 exit;
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网 $count=0;
EHU中国域名交易资讯网 while($row=mysql_fetch_array($this->result)){
EHU中国域名交易资讯网 $data[$count]=$row;
EHU中国域名交易资讯网 $count++;
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网 mysql_free_result($this->result);
EHU中国域名交易资讯网 return $data;
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网 //end of func get_data
EHU中国域名交易资讯网EHU中国域名交易资讯网EHU中国域名交易资讯网 function get_ins_id(){
EHU中国域名交易资讯网 return mysql_insert_id();
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网EHU中国域名交易资讯网 function free(){
EHU中国域名交易资讯网 mysql_close($this->conn);
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网EHU中国域名交易资讯网 function set_db($db_name){
EHU中国域名交易资讯网 if($db_name != $this->database){//select new table while they are different
EHU中国域名交易资讯网 @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!");
EHU中国域名交易资讯网 $this->database=$db_name;
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网 return true;
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网EHU中国域名交易资讯网 function get_cur_db(){
EHU中国域名交易资讯网 return $this->database;
EHU中国域名交易资讯网 }
EHU中国域名交易资讯网}
EHU中国域名交易资讯网//End of class db
EHU中国域名交易资讯网[/code]
风月无边 发表于 2003-9-23 21:24EHU中国域名交易资讯网
不用递归就好啊
EHU中国域名交易资讯网全部整理了提供下载啊,呵呵,好东西,就是太简单了些
西瓜 发表于 2003-9-23 21:26EHU中国域名交易资讯网
数据库结构是怎么样的
HanLiu 发表于 2003-9-23 21:27EHU中国域名交易资讯网
无限分类,我以前就搞过,就是感觉不是很满意,分的太多的话,我无法确定它的执行效率怎么样!!不过就3,4及来讲是没有任何问题的,
Arvan 发表于 2003-9-23 21:27EHU中国域名交易资讯网
[quote]Originally posted by [i]西瓜[/i] at 2003-9-23 09:26 PM:
EHU中国域名交易资讯网数据库结构是怎么样的 [/quote]
EHU中国域名交易资讯网EHU中国域名交易资讯网EHU中国域名交易资讯网不是给出了吗?
Arvan 发表于 2003-9-23 21:29EHU中国域名交易资讯网
[quote]Originally posted by [i]风月无边[/i] at 2003-9-23 09:24 PM:
EHU中国域名交易资讯网不用递归就好啊
EHU中国域名交易资讯网全部整理了提供下载啊,呵呵,好东西,就是太简单了些 [/quote]
EHU中国域名交易资讯网EHU中国域名交易资讯网EHU中国域名交易资讯网使用递归的地方是添加新类的时候用的,如果是树型 论坛的话,就是发新贴的时候用到。其他时候都是查询,不用递归.
赵明亮 发表于 2003-9-23 21:30EHU中国域名交易资讯网
我记得simpleboard就有Arvan论坛类似的功能
小林 发表于 2003-9-23 21:55EHU中国域名交易资讯网
*** 作者被禁止或删除 内容自动屏蔽 ***
小林 发表于 2003-9-23 21:56EHU中国域名交易资讯网
*** 作者被禁止或删除 内容自动屏蔽 ***
Arvan 发表于 2003-9-24 22:43EHU中国域名交易资讯网
输出时order by `main` asc, `orders` asc
EHU中国域名交易资讯网EHU中国域名交易资讯网