gpt4 book ai didi

php - 尝试使用 PHP 和 MySQL 获取节点的路径

转载 作者:行者123 更新时间:2023-11-29 02:07:26 25 4
gpt4 key购买 nike

我想在这里建立一个面包屑,但我在做这件事时遇到了一些麻烦。问题出在我必须保存类别名称(两种语言)、slug 和 id。

我的类别表如下所示:

CREATE TABLE `categories` (
`category_id` smallint(5) unsigned NOT NULL AUTO_INCREMENT,
`category_name` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`category_slug` varchar(256) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`category_parent` smallint(5) unsigned NOT NULL DEFAULT '0',
`category_description_ro` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
`category_description_en` text CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (`category_id`)
) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=latin1

下面是表格中的数据示例:

category id | category name | category_parent

1 Categoria 1 0
2 Categoria 2 0
3 Categoria 3 0
4 Categoria 1.1 1
5 Categoria 1.2 1
6 Categoria 1.3 1
7 Categoria 1.1.2 4

我不得不提一下,我无法对 MySQL 表进行任何更改。

我想要完成的是构建一个面包屑,如下所示:

Home > Categoria 1 > Categoria 1.1 > Categoria 1.1.2

任何人都可以提供一小段代码来说明如何做到这一点吗?我已经尝试过 here 中的“节点路径”代码,但是,正如我所说,我必须在该数组中包含 category_name、category_slug、category_description_ro 和 category_description_en。提前谢谢大家。

最佳答案

您正在使用 adjacency list model 组织分层数据.这种递归操作困难的事实实际上是该模型的一个主要缺点。

一些 DBMS,例如 SQL Server 2005、Postgres 8.4 和 Oracle 11g,支持使用 common table expressions 的递归查询。使用 WITH 关键字。此功能允许轻松编写此类查询,但不幸的是,MySQL 尚不支持递归查询。

您提到您不能对您的表进行任何更改,但是您可以添加一个额外的表吗?如果是,您可能有兴趣查看以下描述替代模型(nested set model)的文章,它使递归操作更容易(可能):

此外,我还建议查看@Bill Karwin 的以下演示。 ,Stack Overflow 的定期贡献者:

演示文稿中描述的闭包表模型是嵌套集的一个非常有效的替代方案。他在他的 SQL Antipatterns 中进一步描述了这个模型。书(excerpt from the chapter on this topic)。

否则,您可能希望在您的应用程序中执行递归部分,在 php 中,如 @geon suggested在另一个答案中。

关于php - 尝试使用 PHP 和 MySQL 获取节点的路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3484114/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com