php、mysql高手来帮忙,如何计算下面某个节点是否在某节点下面?
发布网友
发布时间:2024-10-19 23:04
我来回答
共3个回答
热心网友
时间:2024-11-25 20:57
数据表设计不合理.
建议的表设计:
编号, 上级编号 , 金额 , 路径
路径 就是该条用户记录的整个关系描述
内容可以为 #1#2#3#4#
表示该用户的顶层所属是 ID 1的用户. 上层是ID4的用户
如果表这样的设计的话. 要判断以某用户是否存在某用户下. 就可以直接用字符串比对得出了.
例如: 查询 当前用户是否 是ID 1用户的下属. , 先查出该用户的路径.
假设该用户记录为 编号5 , 上级ID4 , 金额 100 , 路径 #1#2#3#4#
然后用 strpos() , 判断 #1# 是否 存在 当前用户的路径(#1#2#3#)中即可,
例如: 获取ID1的用户所有下属会员 , 用 select * from 会员表 where instr(路径, '#1#') 即可实现
这样设计的好处就是可以快速高效的查询,获取所属关系的用户.
缺点就是维护稍微麻烦点. 在做更新, 删除操作的时候, 需要把所有相关用户的路径都更新一遍.
但整体里说, 比从数据库里拿出数据,. 挨个比较 要划算多了.追问你这个想法是好,但不实际,如果深度达到1000层,一万层,那你这个路径得有多长?
只是想在现在的数据库基础上,能够判断出即可。
追答1w层, 路径信息会记录 1w*2 + 1 个字符串 . 我认为在2w零1个字符里找一个ID .
比在 查询出1w条记录里对比上级ID 要划算的的哦 .
php+mysql 应用 很多时候, 性能瓶颈都是在mysql .
你目前的表设计. 只能循环遍历去比对 .
随着记录条数的增加. 资源的开销远比 一个 大字符串来的多
热心网友
时间:2024-11-25 20:58
function show($a,$b){
$res = mysql_query(select sh1 from member where id=$a);
$row = mysql_fetch_row($res);
if($row[0] == $b)
return '在';
elseif($row[0] == '')
return '不在';
else
function show($row[0],$b);
}
热心网友
时间:2024-11-25 20:58
搜索“二叉树查找”追问不会呀,能帮忙写出代码吗?