十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
无限分类数据库表CREATE TABLE IF NOT EXISTS `royal_ask_group` (
创新互联公司专注骨干网络服务器租用10多年,服务更有保障!服务器租用,成都二枢服务器租用托管 成都服务器租用,成都服务器托管,骨干网络带宽,享受低延迟,高速访问。灵活、实现低成本的共享或公网数据中心高速带宽的专属高性能服务器。
`gid` int(11) NOT NULL auto_increment,
`parent` int(11) NOT NULL default '0',
`topid` int(11) NOT NULL default '0',
`group_key` varchar(255) NOT NULL,
`group_title` varchar(64) NOT NULL,
`ordered` int(5) NOT NULL default '0',
`children` varchar(255) default NULL,
`flag` set('h','c','b','t') default NULL,
`content` text NOT NULL,
`image` varchar(255) default NULL,
PRIMARY KEY (`gid`),
KEY `parent` (`parent`),
KEY `topid` (`topid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;没父id的parent=0;有父id的数组 $sql_data_array = array(
'parent' = (int)$_POST['parent'],
'topid' = (int)$_POST['topid'],
'group_key'= ($_POST['group_key']),
'group_title'= ($_POST['group_title']),
'flag'= (isset($_POST['flags']) ? join(',',$_POST['flags']) : ''),
'content'= ($_POST['content']),
'ordered' = (int)$_POST['ordered']);
可以在表A中增加一个字段,该字段关联表B的SID,或者可以新建一张关联表C (ID,NEWSID,SID) 起到关联作用
select * from b2b_news as a,b2b_news_sort as b where a.sid= b.sid
是关联查询吗 ,如果有其他条件的话,在后面加and吧
给个函数你,调用get_category()就是一个数组格式的结果
function get_category($parent_id=0){
$arr=array();
$sql = "select * from category where parent_id=$parent_id";//查询子级数据
$result = array(a_object,b_object,,,)=sql_query($sql);//查询结果一个数组或列表格式,自己完善。
if($result){
foreach($result as $re){//循环数组
if(get_category($re.id))//如果子级不为空
$re['child'] = get_category($re.id);
$arr[] = $re;
}
return $arr;
}
?php
/*========================================================
类名:catalog
功能:无限分级类
方法:
树形显示分类
catalog_show($id) //参数$id 递归调用
流程:找到父分类为0所有根分类- 一直递归取得所有分类并显示
添加分类
catalog_add($uid,$name) //$uid 父id //$name 分类名
流程:依据$uid,在此id下添加一个新子id
删除分类
catalog_del($uid)//参数 $uid 数要删除的分类
修改分类
catalog_set($id,$name) //参数 $id 要修改的分类 //参数 $name 新的分类名
变量:
$config //数据库信息- host,user,pass,dbname
$catalog_dbname //分类数据库名
数据库:
catalog_id //分类的自然序号
catalog_uid //分类的父分类
catalog_name //分类名
catalog_path_number //亲缘树数字形式 0:1:2
catalog_path_char //亲缘树字符形式 分类1:分类1.1:分类1.1.1
参照文章
========================================================*/
class catalog{
var $config;
var $catalog_dbname;
var $links;
private function connect(){
$this-links = mysql_connect($this-config['host'],$this-config['user'],$this-config['pass']) or die("错误: 第".__LINE__."行br".mysql_error());
mysql_select_db($this-config['dbname'],$this-links);
mysql_query("SET NAMES gb2312");
}
function catalog_show($uid = 0){
$this-connect();
$sql = "Select * FROM ".$this-catalog_dbname. "
Where catalog_uid = ". $uid ."
orDER BY catalog_id ";
$result = mysql_query($sql,$this-links) or die("错误: 第".__LINE__."行br".mysql_error());
if(mysql_num_rows($result) 0){
while ($row = mysql_fetch_assoc($result)){
if($this-sun_catalog($row['catalog_id'])){//判断有没有子分类
$cata_img = "img id = 'img".$row['catalog_id']."' src='./img/last_node.jpg' ōnclick='click_catalog(".$row['catalog_id'].")'/";
}else{
$cata_img = "img src='./img/sp.jpg'/";
}
$path = explode(":",$row['catalog_path_number']);
if(count($path) 1){
for($i=1;$icount($path);$i++){
$path_img .= "img src='./img/sp.jpg'/";
}
}
echo $path_img.$cata_img;
echo "a class='menu' href = 'javascrīpt:send_id(".$row['catalog_id'].")'";
echo $row['catalog_name']."/abr";
$path_img = "";
if($this-sun_catalog($row['catalog_id'])){
$hidden_div = "style='display:none'";
echo "div id = 'div".$row['catalog_id']."' ".$hidden_div."";
$this-catalog_show($row['catalog_id']);
echo "/div";
}
}
}
}
private function sun_catalog($uid){//判断是否有子分类
$sql = "Select * FROM ".$this-catalog_dbname. "
Where catalog_uid = ". $uid ."
orDER BY catalog_id ";
$result = mysql_query($sql,$this-links) or die("错误: 第".__LINE__."行br".mysql_error());
if(mysql_num_rows($result) 0){
return true;
}else{
return false;
}
}
function catalog_add($uid,$name){
//获取父id的亲缘树
$this-connect();
$sql = "Select * FROM ".$this-catalog_dbname."
Where catalog_id = '".$uid."'";
$result = mysql_query($sql,$this-links)
or die("错误: 第".__LINE__."行br".mysql_error());
$row = mysql_fetch_assoc($result);
$fid_path_number = $row['catalog_path_number'];//id的数字亲缘树
$fid_path_char = $row['catalog_path_char'];//id的字符亲缘树
//插入数据 先插入行-再找到最新插入的id, 在依据这个id进行修改
$sql = "Insert INTO ".$this-catalog_dbname."(catalog_uid,catalog_name)
VALUES(".$uid.",'".$name."')";
$result = mysql_query($sql,$this-links)
or die("错误: 第".__LINE__."行br".mysql_error());
$catalog_id = mysql_insert_id();//获取自己的id
$catalog_path_number = $fid_path_number.":".$catalog_id;//得到自己的数字亲缘数
$catalog_path_char = $fid_path_char.":".$name;//得到自己的字符亲缘数
$sql = "Update '".$this-catalog_dbname."'
SET
catalog_path_number = '".$catalog_path_number."',
catalog_path_char = '".$catalog_path_char."'
Where
catalog_id = ".$catalog_id;
mysql_query($sql,$this-links)
or die("错误: 第".__LINE__."行br".mysql_error());
}
function catalog_del($id){
$this-connect();
$sql = "Delete FROM ".$this-catalog_dbname."
Where catalog_id = ".$id;
mysql_query($sql,$this-links)
or die("错误: 第".__LINE__."行br".mysql_error());
}
function catalog_set($id,$name){
$this-connect();
$sql = "Update ".$this-catalog_dbname."
SET
catalog_name = '".$name."'
Where
catalog_id = ".$id;
mysql_query($sql,$this-links)
or die("错误: 第".__LINE__."行br".mysql_error());
}
}
?
/**
* 递归实现无限极分类
* @param $array 分类数据
* @param $pid 父ID
* @param $level 分类级别
* @return $list 分好类的数组 直接遍历即可 $level可以用来遍历缩进
*/
function getTree($array, $pid =0, $level = 0){
//声明静态数组,避免递归调用时,多次声明导致数组覆盖
static $list = []; foreach ($array as $key = $value){ //第一次遍历,找到父节点为根节点的节点 也就是pid=0的节点
if ($value['pid'] == $pid){ //父节点为根节点的节点,级别为0,也就是第一级
$value['level'] = $level; //把数组放到list中
$list[] = $value; //把这个节点从数组中移除,减少后续递归消耗
unset($array[$key]); //开始递归,查找父ID为该节点ID的节点,级别则为原级别+1
getTree($array, $value['id'], $level+1);
}
}
主要是利用函数的递归,然后在无下级的条件下退出递归!
这个是我自己写的一个函数,无限树型的你参考下吧!
function getCategoryTree($TID, $iTable,$url,$urlPar="1=1") {
if ($TID == 0) {
$treeStr = $treeStr."ul id=\"tree\" class=\"lightTreeview treeview-black\"";
}
$sql = "select * from `$iTable` where TID1 = ".$TID." order by orderid";
$rs = mysql_query($sql);
while ($ary = mysql_fetch_array($rs)) {
$treeStr = $treeStr."li";
$rs2 = mysql_query("select count(*) from `$iTable` where TID1 = ".$ary["id"]);
$Vcount = @mysql_result($rs2, 0);
if ($Vcount != 0) {
$treeStr = $treeStr."div class=\"treeview-folder\"".$ary["title"]."/divul style=\"display:none\"";
$treeStr = $treeStr.getCategoryTree($ary["id"], $iTable,$url,$urlPar);
$treeStr = $treeStr."/ul";
} else {
$treeStr = $treeStr."div class=\"treeview-file\"a href=\"".$url."?T=".$ary["id"]."".$urlPar."\" target=\"pro\"".$ary["title"]."/a/div";
}
$treeStr = $treeStr."/li";
}@mysql_free_result($rs);
if ($TID == 0) {
$treeStr = $treeStr."/ul";
}
return $treeStr;
}