网站建设资讯

NEWS

网站建设资讯

php递归查询数据库不卡的简单介绍

php递归查询不会,,求教。就是一个三级分类传个ID找到他的上级,还有父级。。

这种类型的数据,一般数据库中,一张表会有存在两个字段,一个是它本身id,另一个是它的父级parent_id。

成都创新互联公司网站建设由有经验的网站设计师、开发人员和项目经理组成的专业建站团队,负责网站视觉设计、用户体验优化、交互设计和前端开发等方面的工作,以确保网站外观精美、网站设计制作、做网站易于使用并且具有良好的响应性。

既然要找到它的祖父级,sql语句这样写:

$id = empty($_POST['id'])?'':$_POST['id'];

$parent_id = get_parent_id($id);

$p_p_id = get_parent_id($parent_id);

function get_parent_id($id){

$sql = "select parent_id from ecs_table1 where id=" . $id;

return($GLOBALS['db']-getone($sql ));

}

递归,就是根据现有的id,重复取。

上面get_parent_id只是获取父id,当然,你可以写一个直接获取祖父id的函数。

不过,现在大部分php网站,都只会有获取父类的函数,想discuz,ecshop等。获取祖父id,就是不断的获取该id的父id。

PHP递归求解答

弱鸡,你少定义一个字段   :familyId

一个族的familyId相同,首先 sql 把 familyId = "自己familyID" 结果全部返回

再在PHP中递归出结果,而不是在数据库中反复查找条件,网站都会卡死

比如数组$List 为 张氏家族 所有的列表(也就是张氏家族sql返回结果)

首先遍历一个名称列表,以ID为KEY :$namelist = array(1=张三,2=张四,3=张五,4=张六);

再遍历出一个父子关系列表:也以ID为KEY,父方ID为值:$flist = array(1=2,2=3,3=4,4=5);

$namelist = array(1='张三',2='张四',3='张五',4='张了',6="张飞",7="张六",9="张宝",12='张七',13='张角');

$flist = array(1=2,2=3,3=7,4=9,7=12,6=13);

$res = array();

family(1, $flist, $res,$namelist);

var_dump($res);

public function family($id,$flist,$res,$namelist){

if($flist[$id]){

$res[] = $namelist[$flist[$id]];

family($flist[$id],$flist,$res,$namelist);

}

php 递归问题

第一,没有选择数据库,在连接数据库后添加mysql_select_db("数据库名");

第二、我感觉不代码不全吧,因为我拷下来看了一下,少一},当然上面那个没少,补充的少了。

第三、还有没看出这个$ii是干什么用的。

第四、没感觉$selec=0与不等于0输出有什么不同。

第五、以后最好是把html代码与程序分开写。

因为不知道需求,只能根据你的程序简单修改如下:

?php

function TreeMenu($selec) {

$Conn=mysql_connect("localhost","kk","kk123");

mysql_select_db("数据库名");

$ii=1;

$sql="select * from tvmenu where bid=".$selec;

$result=mysql_query($sql,$Conn);

$str = "";

while($row =mysql_fetch_array($result)) {

if($selec=0) {

$str = 'option value="'.$row['id'].'"'.$row['name'].'/option ';

}else {

$str = 'option value="'.$row['id'].'"'.$row['name'].'/option ';

}

echo $str;

$ii++;

TreeMenu($row['id']);

$ii--;

}

}

?

select name="bid" id="bid"

?php

TreeMenu(0);

?

/select

php+mysql在数据库里数据大的话查询很慢

1.建立索引,尽可能把索引建立到你你经常比较的字段上,如select

a,b,c,d

from

a

where

索引字段=值,这个索引字段最好是数值型数据

2.慢有更多情况,

情况1:远程查询,其实可能查询不慢,由于数据量大,传输过程慢

情况2:WHERE

后面的比较数据太多,比如

like

类的语句

情况3:需要哪个字段只取那个字段就行了,比如select

*

from

a与select

b,c,d

from

a速度是有差距的

3.数据库定期维护,压缩,把不常用的数据备份后放入备份库里,查询时查备份库等

问题补充:

.第一条:建立索引,怎么建立,我也听说过,但不知道怎么使用

答:每种数据建立索引的方法有差异,比如SQL

SERVER

2000中可对多个字段进行索引,比如SQL

SERVER2000中有命令

CREATE

INDEX

为给定表或视图创建索引。

只有表或视图的所有者才能为表创建索引。表或视图的所有者可以随时创建索引,无论表中是否有数据。可以通过指定限定的数据库名称,为另一个数据库中的表或视图创建索引。

语法

CREATE

[

UNIQUE

]

[

CLUSTERED

|

NONCLUSTERED

]

INDEX

index_name

ON

{

table

|

view

}

(

column

[

ASC

|

DESC

]

[

,...n

]

)

[

WITH

index_option

[

,...n]

]

[

ON

filegroup

]

index_option

::=

{

PAD_INDEX

|

FILLFACTOR

=

fillfactor

|

IGNORE_DUP_KEY

|

DROP_EXISTING

|

STATISTICS_NORECOMPUTE

|

SORT_IN_TEMPDB

}

第三条:数据库定期维护,压缩:怎么个压缩法?及时备份数据到备份库查询备份库,那查询时不是还慢吗?

答:这个有压缩工具,基本上每种数据库都有自己的压缩数据库的工具

[PHP][THNIKPHP]如何递归查询数据库

function get_category($id){

$str=array();

//$sql = "select * from biao where id=$id";查询节点,自己写吧

$result = array('id'=,'parent_id'=);//查询结果一个数组格式

if($result){

$str = get_category($result['parent_id']);

$str[]=$result;

}

return $str;

}

}

调用get_category()就行了,$str第一个元素是节点本身,去掉就行了。


本文名称:php递归查询数据库不卡的简单介绍
网页网址:http://cdweb.net/article/dsidgoo.html