这个需要用程序递归处理
成都创新互联公司成立于2013年,先为大通等服务建站,大通等地企业,进行企业商务咨询服务。为大通企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
$dept_tree=[];
$deptid = 19;
while($deptid0){
//假设你的数据库查询是这个函数,根据条件直接查询一条记录返回
$dept = getone('department',['id'=$deptid]);
//防止数据丢失出错
if(empty($dept))break;
array_unshift($dept_tree,$dept);
$deptid = $dept['dep_parentid'];
//如果需要防止数据错乱出现递归,这里可以判断一下
if(in_array($deptid,array_column($dept_tree,'id') !== false){
//说明职位关系乱了,有死循环
break;
}
}
可以把这段代码封装成一个函数使用。这里就不论从哪一级开始查询了,总是能把该职位及其上级全部查询出来,按顺序放进数组里
$dept_tree 类似这样
array(
0=array(
'id'=1,
'dep_parentid'=0,
'dep_name'='顶级',
),
1=array(
'id'=2,
'dep_parentid'=1,
'dep_name'='国灿金融',
),
2=array(
'id'=4,
'dep_parentid'=2,
'dep_name'='招聘部',
),
3=array(
'id'=19,
'dep_parentid'=4,
'dep_name'='经理助理',
),
)
在满足上面条件下,如果,两种的记录顺序不能完全一致的话,就只能通过遍历来添加数据。此时,第2个sql语句里,要增加
与
前面SQL之间的关联字段,比如:username,然后,再通过php代码遍历数组,将两者合并。
如果两者顺序、数量都一致,可以考虑使用array_merge_recursive()函数与array_merge()函数。
ID u_name price preant_id
1 水果
2 文具
3 荔枝 12 1
4 苹果 10 1
5 香蕉 5 1
6 橘子 3 1
7 橙子 6 1
8 铅笔 .5 2
9 圆珠笔 1 2
10 水笔 5 2
11 电脑配件 0
12 主板 11
13 CPU 11
14 显卡 11
15 内存 11
16 显示器 11
17 散热风扇 11
18 硬盘 11
19 华硕主板 300 12
20 技嘉主板 400 12
21 GTX970显卡 1800 14
22 GTX960显卡 1400 14
23 金士顿2G内存 100 15
24 I3 4160 600 13
25 I5 2500K 800 13
26 AOC 19寸 500 16
27 宏基24寸 800 16
28 60G硬盘 30 18
29 80G硬盘 40 18
30 散热400 40 17
31 散热300 20 17
你数据库设计是这样设计..
SQL语句:
SELECT p1.u_name as 商品类型,p2.u_name as 商品名称 ,p2.price as 价格 from product p1,product p2 where p1.id=p2.preant_id
得到结果
商品类型 商品名称 价格
水果 荔枝 12
水果 苹果 10
水果 香蕉 5
水果 橘子 3
水果 橙子 6
文具 铅笔 .5
文具 圆珠笔 1
文具 水笔 5
电脑配件 主板
电脑配件 CPU
电脑配件 显卡
电脑配件 内存
电脑配件 显示器
电脑配件 散热风扇
电脑配件 硬盘
主板 华硕主板 300
主板 技嘉主板 400
显卡 GTX970显卡 1800
显卡 GTX960显卡 1400
内存 金士顿2G内存 100
CPU I3 4160 600
CPU I5 2500K 800
显示器 AOC 19寸 500
显示器 宏基24寸 800
硬盘 60G硬盘 30
硬盘 80G硬盘 40
散热风扇 散热400 40
散热风扇 散热300 20