gpt4 book ai didi

php - 有没有办法在不使用递归的情况下从 MySQL 中获取嵌套数据?

转载 作者:行者123 更新时间:2023-11-29 01:18:14 24 4
gpt4 key购买 nike

假设我有一个菜单系统,所有导航项都存储在 MySQL 表中,如下所示:

Table: Menu
-------------------------------------------------------
| id | title | url | parent_id |
-------------------------------------------------------
| 1 | Home | /home | 0 |
| 2 | About | /about | 0 |
| 3 | History | /about/history | 2 |
| 4 | Location | /about/location | 2 |
| 5 | Staff | /about/staff | 2 |
| 6 | Articles | /blog | 0 |
| 7 | Archive | /blog/archive | 6 |
| 8 | Tags | /blog/tags | 6 |
| 9 | Tag Name 1 | /blog/tags/tag-name-1 | 8 |
| 10 | Tag Name 2 | /blog/tags/tag-name-2 | 8 |
-------------------------------------------------------

如您所见,此表非常简单,唯一复杂的是自引用列 parent_id,它定义了菜单应如何嵌套。

因此这将产生以下菜单:

- Home
- About
- History
- Location
- Staff
- Articles
- Archive
- Tags
- Tag Name 1
- Tag Name 2

有没有办法在不使用 PHP(但它可以是 Python、Java 或任何其他语言)中每次迭代查询数据库的递归函数的情况下从上述表中获取此结构?

理想情况下,这可以通过一个 MySQL 查询来处理。也许需要更改表结构以适应这种情况 - 如果是的话,如何?

最佳答案

您可以一次拉取所有内容,然后在 PHP 中递归使用它。这样您可以节省一些查询时间,但会节省一些编写脚本的时间。

我会做这样的事情:

Get all data, ordered by parent id
Put row into $data[$parent_id][]

define function to build menu, takes one param which is id
get $data[$id] and work with that array, building the array.

while looping through the items, check if size of $data[current-item-id] > 0
if so, call above function with 0 as param

这样,您只需查询一次数据库,但会使用更多的服务器内存。

关于php - 有没有办法在不使用递归的情况下从 MySQL 中获取嵌套数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8341064/

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