php数据库无限分类 php数据库无限分类查询

PHP MYSQL 请教 2个字段能无限分类吗?

没懂你的CID,和scid  是什么。

创新互联公司一直在为企业提供服务,多年的磨炼,使我们在创意设计,营销型网站到技术研发拥有了开发经验。我们擅长倾听企业需求,挖掘用户对产品需求服务价值,为企业制作有用的创意设计体验。核心团队拥有超过十年以上行业经验,涵盖创意,策化,开发等专业领域,公司涉及领域有基础互联网服务雅安服务器托管成都App制作、手机移动建站、网页设计、网络整合营销。

无限分类是无限的树形结构么?

根据无限树形结构说一下。一般情况下 是用递归调用来处理的。字段中  用id 和parentid 两个字段。 假设有一个函数 fetch是取mysql 数据的。简单写一个函数

function getdata($parentid){

$tree=fetch("parentid = {$parentid}");

foreach($tree as $k= $v){

$tree[$k]['children']=getdata($v['id']);

}

return $tree;

}

调用$tree=getdata(0);

$tree  就是树形的。

当然 如果有用框架估计更简单点。比如laravel 。定义一个$tree的模型,表中有id,和parentid两字段。模型中新增两个函数

public function childrentree()

{

  return $this-hasMany(get_class($this), 'parentid', 'id');

}

public function children()

{

  return $this-childrentree();

}

然后使用

tree::with(["children"])-where('parentid', 0)-get();  就可以获取树形菜单

PHP无限级分类

主要是利用函数的递归,然后在无下级的条件下退出递归!

这个是我自己写的一个函数,无限树型的你参考下吧!

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;

}

php 无限分类

可以在表A中增加一个字段,该字段关联表B的SID,或者可以新建一张关联表C (ID,NEWSID,SID) 起到关联作用

select * from b2b_news as a,b2b_news_sort as b where a.sid= b.sid

是关联查询吗 ,如果有其他条件的话,在后面加and吧

PHP+MySQL无限分类语句

无限级别的,使用递归编程比较容易,基本方法是定义一个显示子菜单的函数:

function ShowMenu($pid){

....显示数据库里面PID为$pid的所有菜单项目以及子项目(通过调用自身实现).....

}

主程序调用ShowMenu(0)实现输出整个菜单。

整个程序的逻辑一般这样:

echo ShowMenu(0);

function ShowMenu($pid){

//如果数据库不存在PID=$pid的记录,返回空串""

$sql="select count(*) from tab where pid=$pid";

mysql_query($sql);

list($cnt)=mysql_fetch_row($res);

mysql_free_result($res);

if ($cnt==0) return '';

//否则返回所有的子菜单项,格式ULLI...LI.../UL

$ret_str='UL';

$sql="select id,title from tab where pid=$pid";

mysql_query($sql);

while(list($id,$title)=mysql_fetch_row($res)){

$ret_str.="LI$title".ShowMenu($id)."/LI";

}

mysql_free_result($res);

$ret_str.='UL';

return $ret_str;

}

PHP无限级分类怎么写啊

?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());

}

}

?

如何使用PHP实现无限级分类

你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。

这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了。

复制代码代码如下:

function generateTree($items){

$tree = array();

foreach($items as $item){

if(isset($items[$item['pid']])){

$items[$item['pid']]['son'][] = $items[$item['id']];

}else{

$tree[] = $items[$item['id']];

}

}

return $tree;

}

$items = array(

1 = array('id' = 1, 'pid' = 0, 'name' = '安徽省'),

2 = array('id' = 2, 'pid' = 0, 'name' = '浙江省'),

3 = array('id' = 3, 'pid' = 1, 'name' = '合肥市'),

4 = array('id' = 4, 'pid' = 3, 'name' = '长丰县'),

5 = array('id' = 5, 'pid' = 1, 'name' = '安庆市'),

);

print_r(generateTree($items));

可以看到下面打印的结果:

复制代码代码如下:

Array

(

[0] = Array

(

[id] = 1

[pid] = 0

[name] = 安徽省

[son] = Array

(

[0] = Array

(

[id] = 3

[pid] = 1

[name] = 合肥市

[son] = Array

(

[0] = Array

(

[id] = 4

[pid] = 3

[name] = 长丰县

)

)

)

[1] = Array

(

[id] = 5

[pid] = 1

[name] = 安庆市

)

)

)

[1] = Array

(

[id] = 2

[pid] = 0

[name] = 浙江省

)

)

上面生成树方法还可以精简到5行:

复制代码代码如下:

function generateTree($items){

foreach($items as $item)

$items[$item['pid']]['son'][$item['id']] = $items[$item['id']];

return isset($items[0]['son']) ? $items[0]['son'] : array();

}

上面这种无限极分类数据树形结构化的方法值得借鉴。但是我觉得这段代码实际用途并不明显啊,你想取出格式化的树形数据还是要递归啊:

复制代码代码如下:

/**

* 如何取数据格式化的树形数据

*/

$tree = generateTree($items);

function getTreeData($tree){

foreach($tree as $t){

echo $t['name'].'br';

if(isset($t['son'])){

getTreeData($t['son']);

}

}

}

getTreeData($tree);


分享文章:php数据库无限分类 php数据库无限分类查询
分享网址:http://azwzsj.com/article/dociidd.html