mysql结果转数组_将数据库结果转换为数组

本文介绍了如何通过SQL查询获取数据库的层级关系数据,并使用PHP进行后处理,将结果转化为层次结构的数组。作者分享了用于获取分类学层次结构的查询方法,展示了如何利用MySQL的封闭表和自连接来实现。此外,还提到了对查询结果进行后处理的步骤,以及如何将数据结构化为易于操作的数组。
摘要由CSDN通过智能技术生成

小编典典

好的,我编写了PHP类来扩展Zend Framework DB表,行和行集类。无论如何,我一直在开发它,因为我在PHP

Tek-X上谈论了两周有关分层数据模型的内容。

我不想将我所有的代码发布到Stack Overflow,因为如果这样做,它们将隐式地获得知识共享许可。 更新: 我将代码提交给Zend

Framework

Extras孵化器,在幻灯片共享中,我的演示文稿是带有SQL和PHP的分层数据模型。

我将用伪代码描述解决方案。我使用的是动物学分类学作为测试数据,可从ITIS.gov下载。该表是longnames:

CREATE TABLE `longnames` (

`tsn` int(11) NOT NULL,

`completename` varchar(164) NOT NULL,

PRIMARY KEY (`tsn`),

KEY `tsn` (`tsn`,`completename`)

)

我为分类法层次结构中的路径创建了一个 封闭表 :

CREATE TABLE `closure` (

`a` int(11) NOT NULL DEFAULT '0', -- ancestor

`d` int(11) NOT NULL DEFAULT '0', -- descendant

`l` tinyint(3) unsigned NOT NULL, -- levels between a and d

PRIMARY KEY (`a`,`d`),

CONSTRAINT `closure_ibfk_1` FOREIGN KEY (`a`) REFERENCES `longnames` (`tsn`),

CONSTRAINT `closure_ibfk_2` FOREIGN KEY (`d`) REFERENCES `longnames` (`tsn`)

)

给定一个节点的主键,您可以通过以下方式获取其所有后代:

SELECT d.*, p.a AS `_parent`

FROM longnames AS a

JOIN closure AS c ON (c.a = a.tsn)

JOIN longnames AS d ON (c.d = d.tsn)

LEFT OUTER JOIN closure AS p ON (p.d = d.tsn AND p.l = 1)

WHERE a.tsn = ? AND c.l <= ?

ORDER BY c.l;

联接要closure AS p包括每个节点的父ID。

该查询很好地利用了索引:

+----+-------------+-------+--------+---------------+---------+---------+----------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值