在MySql下,怎么用SQL语句遍历一个树结构

在MySql下,怎么用SQL语句遍历一个树结构,第1张

f exists (select * from dbo.sysobjects where id = object_id(N'[tb]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)

drop table [tb]

GO

--示例数据

create table [tb]([id] int identity(1,1),[pid] int,name varchar(20))

insert [tb] select 0,'中国'

union all select 0,'美国'

union all select 0,'加拿大'

union all select 1,'北京'

union all select 1,'上海'

union all select 1,'江苏'

union all select 6,'苏州'

union all select 7,'常熟'

union all select 6,'南京'

union all select 6,'无锡'

union all select 2,'纽约'

union all select 2,'旧金山'

go

if exists (select * from dbo.sysobjects where id = object_id(N'[dbo].[f_id]') and xtype in (N'FN', N'IF', N'TF'))

drop function [dbo].[f_id]

GO

/*--树形数据处理

级别及排序字段

--邹建 2003-12(引用请保留此信息)--*/

/*--调用示例

--调用函数实现分级显示

select replicate('-',b.[level]*4)+a.name

from [tb] a,f_id()b

where a.[id]=b.[id]

order by b.sid

--*/

create function f_id()

returns @re table([id] int,[level] int,sid varchar(8000))

as

begin

declare @l int

set @l=0

insert @re select [id],@l,right(10000+[id],4)

from [tb] where [pid]=0

while @@rowcount>0

begin

set @l=@l+1

insert @re select a.[id],@l,b.sid+right(10000+a.[id],4)

from [tb] a,@re b

where a.[pid]=b.[id] and b.[level]=@l-1

end

return

end

go

--调用函数实现分级显示

select replicate('-',b.[level]*4)+a.name

from [tb] a,f_id()b

where a.[id]=b.[id]

order by b.sid

go

--删除测试

drop table [tb]

drop function f_id

go

/*--结果

中国

----北京

----上海

----江苏

--------苏州

------------常熟

--------南京

--------无锡

美国

----纽约

----旧金山

加拿大

--*/

<?php

$con = mysql_connect("localhost","root","")//连接数据库

mysql_select_db('test')//选择数据库

?>

<html>

<head>

  <title>dropdown from mysql</title>

</head>

<body>

  <h1>dropdown from mysql</h1>

  <form action="#" method="post">

<select>

<option value=0>--请选择--</option>

<?php

$sql= "select val from custom where field='hook_load'"//sql语句

$result = mysql_query($sql, $con)//执行sql语句

while($row = mysql_fetch_array($result))

  {

    echo "<option value='$row[val]'>$row[val]</option>"//循环,拼凑下拉框选项

  } 

?>

</select>

  </form>

</body>

</html>

问题出在mysql_fetch_array这一步,此方法的第二个参数表示你要获取的数组的类型

MYSQL_ASSOC 关联数组,就是键名是id,name的

MYSQL_NUM 索引数组,键名是数字的

MYSQL_BOTH 以上两种都有

不给第二个参数的话,默认是MYSQL_BOTH,所以就出现了你上面的结果


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/zaji/8673680.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-19
下一篇2023-04-19

发表评论

登录后才能评论

评论列表(0条)

    保存