function get_tree($table,$parent_id=0,$level=1){
global $db; global $tpf;global $smarty;
$sql= "SELECT id,cate_name as name FROM `{$tpf}$table` WHERE `parent_id`=$parent_id ORDER BY id DESC";
$res = $db->get_result_rows($sql); //取得一记录以二维数组返回 $arr[0]['id']'$arr[1]['name']
static $arr = array();
foreach($res as $key=>$rows){
$arr[$key]['id'] = $rows['id'];
$arr[$key]['name'] = $rows['name'];
$arr[$key]['level'] = $level;
get_tree($table,$rows['id'],$level+1);
}
return $arr;
}
$c = get_tree("str_news_categories");
print_r($c);我测试了返回的数组结果是错误!
global $db; global $tpf;global $smarty;
$sql= "SELECT id,cate_name as name FROM `{$tpf}$table` WHERE `parent_id`=$parent_id ORDER BY id DESC";
$res = $db->get_result_rows($sql); //取得一记录以二维数组返回 $arr[0]['id']'$arr[1]['name']
static $arr = array();
foreach($res as $key=>$rows){
$arr[$key]['id'] = $rows['id'];
$arr[$key]['name'] = $rows['name'];
$arr[$key]['level'] = $level;
get_tree($table,$rows['id'],$level+1);
}
return $arr;
}
$c = get_tree("str_news_categories");
print_r($c);我测试了返回的数组结果是错误!
class Mysql {
/**
* mysql连接执行类,将sql的执行实现数据库无关性
*
*
*
*/ /**
* 类变量定义
* @param $conn mysql连接号
* @param $error 错误代号
* @param $username/$password 数据库连接用户名和密码
* @param array $err_info 错误信息
*
* @param $debuginfo 调试信息
* @param $table 当前操作数据表
*/
var $conn;
var $error;
var $username = "";
var $password = "";
var $host;
var $database;
var $err_info = array(
0 => "没有错误!",
1 => "数据库连接失败!",
2 => "sql执行出错!"
);
var $debuginfo="";
var $table; function Mysql( $arr=null ) {
if( is_array($arr) ) {//var_dump($arr);
$this->set_login( $arr['host'] , $arr['username'] , $arr['password'] );
$this->set_db( $arr['database'] );
$this->set_conn();
if( isset($this->error) && $this->error!=0 ) die($this->err_info[$this->error]);
}
} /**
* 设置数据库名
* @param string $database
*
* return void
*/
function set_db ( $dbfile ){
$this->database = $dbfile;
}
/**
* 设置连接数据库的用户名和密码
* @param string $user 用户名
* @param string $pwd 密码
*
* @return void
*/
function set_login ( $host , $user , $pwd ){
$this->host=$host;
$this->username=$user;
$this->password=$pwd;
}
/**
* 创建数据库连接
* @param
* return void
*/
function set_conn (){
$this->conn=@mysql_connect($this->host,$this->username,$this->password );
@mysql_query("set character set utf8");
@mysql_query("set names utf8");
if ( isset($this->conn) && @mysql_select_db($this->database) )
$this->error=0;
else
$this->error=1;
}
/**
* 设置当前操作的数据表
* @param string $tb
*
* @return void
*/
function set_table( $tb ) {
$this->table = $tb;
}
/**
* 获取数据表总条数
* @param array $condition 条件数组
* @param string $tb 要操作的数据表
**/
function get_count( $tb = "" , $condition = null ) {
if (empty( $tb )) $tb = $this->table;
else $this->table=$tb;
$sql = "select count(*) as c from `$tb`";
if( isset($condition) ) $sql.=" where $condition"; return $this->get_result_rows($sql);
}
/**
* 返回sql查询结果
* @param string $sql sql语句
*
* @return #id
*/
function get_result( $sql ){
$result = @mysql_query( $sql , $this->conn );
if(!$result) $this->error = 2;
else return $result;
}
/**
* 获取查询的结果
* @param string $sql
*
* @return array 结果的二维数组
*/
function get_result_rows( $sql ){
$array = array() ;
$result = $this->get_result( $sql );
while( $row = @mysql_fetch_assoc( $result ) )
$array[] = $row ;
return $array;
}
//获取一个二维数据表,以一个字体为一维下标
//$id 默认做下标的字段
function get_result_id( $sql, $id='id' ) {
$arr = $this->get_result_rows( $sql );
$arr2 = array();
for($i=0; $i<count($arr); $i++){
$j = $arr[$i][$id];
$arr2[$j] = $arr[$i];
}
return $arr2;
}
/**
* 获取部分查询结果
*
* @param Array 数组
* @return Array
*/
function get_query_result( $cols , $tb=null , $condition=null , $order=null , $limit=null , $start=0 ) {
if( empty($tb) ) $tb=$this->table;
else $this->table=$tb;
if( @is_array($cols) ) $col="`".implode('`,`',$cols)."`";
else $col = $cols; $sql = "select $col from `$tb`";
if( isset($condition) ) $sql.=" where $condition";
if( isset($order) ) $sql.=" order by $order";
if( isset($limit) ) $sql.=" limit $start,$limit"; return $this->get_result_rows($sql);
} /**
* 执行数据库插入操作
*
* @param $sql作表
*/
function insert_info( $sql ) {
return $this->get_result( $sql );
}
/**
* 执行数据库更新操作
*
* @param array $sql
*/
function update_info( $sql ) {
return $this->get_result( $sql );
}
}数据库SQL:
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";--
-- 数据库: `mystr`
---- ----------------------------------------------------------
-- 表的结构 `str_news_categories`
--CREATE TABLE `str_news_categories` (
`id` smallint(5) unsigned NOT NULL auto_increment,
`parent_id` smallint(5) NOT NULL default '0',
`cate_name` varchar(50) character set utf8 NOT NULL,
`sort_order` smallint(4) NOT NULL default '1',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;--
-- 导出表中的数据 `str_news_categories`
--INSERT INTO `str_news_categories` (`id`, `parent_id`, `cate_name`, `sort_order`) VALUES
(1, 0, '热点新闻', 1),
(2, 0, '娱乐新闻', 1),
(3, 0, '企业新闻', 1),
(4, 0, 'IT新闻', 1),
(5, 3, '私企新闻', 2),
(6, 3, '行业新闻', 1),
(7, 6, '大磊', 1);
写的递归函数:function get_tree($table,$parent_id=0,$level=1){
global $db; global $tpf;global $smarty;
$sql= "SELECT id,cate_name as name FROM `{$tpf}$table` WHERE `parent_id`=$parent_id ORDER BY id DESC";
$res = $db->get_result_rows($sql); //取得一记录以二维数组返回 $arr[0]['id']'$arr[1]['name']
static $arr = array();
foreach($res as $key=>$rows){
$arr[$key]['id'] = $rows['id'];
$arr[$key]['name'] = $rows['name'];
$arr[$key]['level'] = $level;
get_tree($table,$rows['id'],$level+1);
}
return $arr;
}
$c = get_tree("str_news_categories");
print_r($c);
global $db; global $tpf;global $smarty;
$sql= "SELECT id,cate_name as name FROM `{$tpf}$table` WHERE `parent_id`=$parent_id ORDER BY id DESC";
$res = $db->get_result_rows($sql); //取得一记录以二维数组返回 $arr[0]['id']'$arr[1]['name']
$arr = array();
foreach($res as $key=>$rows){
$arr[$key]['id'] = $rows['id'];
$arr[$key]['name'] = $rows['name'];
$arr[$key]['level'] = $level;
$arr[$key]['child']=get_tree($table,$rows['id'],$level+1);
}
return $arr;
}
$c = get_tree("str_news_categories");
print_r($c);