php mysql递归查询获取所有下级_php递归函数查询mysql数据,获取所有上下级

本文介绍了如何使用PHP结合MySQL递归查询获取数据库表中某个ID的所有上级和下级节点。通过示例代码展示了getSup和getSub两个函数,分别用于获取所有上级和下级ID,以及对应的数据库表结构和数据。
摘要由CSDN通过智能技术生成

/*

* 获取所有上级

* @param $id String 待查找的id

* @return String | NULL 失败返回null

*/

public function getSup($id,$n = 0)

{

$sql = "SELECT `pid` from `aaa` where `id` =" . $id;

$res = $this->db->getone($sql); //获取字段值,如15

if ($res) {

if($n){

$ids .= "," . $res;

}else{

$ids = $res;

}

$n++;

$ids .= $this->test($res,$n);

}

return $ids;

}

/*

* 获取所有下级

* @param $id String 待查找的id

* @return String | NULL 失败返回null

*/

public function getSub($id)

{

$isComma = strstr($id,',');

if($isComma){

$sql = "SELECT `id` from `aaa` where `pid` in (" . $id.")";

}else{

$sql = "SELECT `id` from `aaa` where `pid`=" . $id;

}

$res = $this->sql($sql); //获取二维数组,如Array ( [0] => Array ( [id] => 12 ) [1] => Array ( [id] => 13 ) )

if ($res) {

$id = '';

foreach ($res as $k=>$v) {

if($v['id']>0){

if($k == 0){

$id = $v['id'];

}else{

$id .= ','.$v['id'];

}

}

}

if($isComma){

$ids .= "," . $id;

}else{

$ids .= $id;

}

$ids .= $this->test2($id);

}

return $ids;

}

数据库

751958a38df80f6181da197aeee31afa.png

-- ----------------------------

-- Table structure for aaa

-- ----------------------------

DROP TABLE IF EXISTS `aaa`;

CREATE TABLE `aaa` (

`id` int(11) NOT NULL,

`nodename` varchar(20) DEFAULT NULL,

`pid` int(11) DEFAULT NULL,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=latin1;

-- ----------------------------

-- Records of aaa

-- ----------------------------

INSERT INTO `aaa` VALUES ('1', 'A', '0');

INSERT INTO `aaa` VALUES ('2', 'B', '1');

INSERT INTO `aaa` VALUES ('3', 'C', '1');

INSERT INTO `aaa` VALUES ('4', 'D', '2');

INSERT INTO `aaa` VALUES ('5', 'E', '2');

INSERT INTO `aaa` VALUES ('6', 'F', '3');

INSERT INTO `aaa` VALUES ('7', 'G', '6');

INSERT INTO `aaa` VALUES ('8', 'H', '0');

INSERT INTO `aaa` VALUES ('9', 'I', '8');

INSERT INTO `aaa` VALUES ('10', 'J', '8');

INSERT INTO `aaa` VALUES ('11', 'K', '8');

INSERT INTO `aaa` VALUES ('12', 'L', '9');

INSERT INTO `aaa` VALUES ('13', 'M', '9');

INSERT INTO `aaa` VALUES ('14', 'N', '12');

INSERT INTO `aaa` VALUES ('15', 'O', '12');

INSERT INTO `aaa` VALUES ('16', 'P', '15');

INSERT INTO `aaa` VALUES ('17', 'Q', '0');

mysql with 查询上下级

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值