php - 仅在一个 SQL 查询中检索所有类别、子类别、子子类别等的完整列表

标签 php sql mysql

我在MySQL中有如下表结构和数据

CatID  CatName     ParentCatID
-------------------------------
1       Shirts        NULL
2       Short Sleev    1
3       Long Sleev     1
4       Collarless     2
5       Collar         2
6       Collarless     3
7       Collar         3
8       Square Cut     4
9       Round Cut      4
10      Square Cut     6
11      Round Cut      6

我想要的返回数据是这样的:

Shirts > Short Sleev
Shirts > Long Sleev
Shirts > Short Sleev > Collarless
Shirts > Short Sleev > Collar
Shirts > Long Sleev > Collarless
Shirts > Long Sleev > Collar
Shirts > Short Sleev > Collarless > Square Cut
Shirts > Short Sleev > Collarless > Round Cut
Shirts > Short Sleev > Collar > Square Cut
Shirts > Short Sleev > Collar > Round Cut

我们如何在 MySQL 中使用一个 SQL 查询获取这些数据?

最佳答案

不是真正的答案,但我过去在 PHP 中使用的一个肮脏的修复是这样的:

$categories = array();

$sql = "SELECT CatID, CatName, ParentCatID FROM TableName";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)) {
    $parent = intval($row['ParentCatId']);
    if (!isset($categories[$parent])) {
        $categories[$parent] = array();
    }
    $categories[$parent][] = $row;
}

这将为您提供一组类别和子类别,您可以使用递归函数对其进行迭代。像这样的东西:

function build_categories($parent, $categories) {
    if (isset($categories[$parent]) && count($categories[$parent])) {
        echo '<ul>';
        foreach ($categories[$parent] as $category) {
            echo '<li><a href="#">' . $category['CatName'] . '</a>';
            echo build_categories($category['id'], $categories);
            echo '</li>';
        }
        echo '</ul>';
    }
}
$menu = build_categories(0, $categories);

关于php - 仅在一个 SQL 查询中检索所有类别、子类别、子子类别等的完整列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1169876/

相关文章:

php - 获取DIV标签内容的正则表达式

MySQL——不减少行集的 WHERE 子句

php - Codeigniter 选择不同的并传递变量列表

MySQL SELECT 查询性能

php - 使用 PHP 注册无效

php - 默认情况下,WordPress 会在其 JavaScript 中公开基本 URL 吗?

PHP 获取超过 20000 封 imap 电子邮件

SQL查询删除两年以上的记录

SQL Server - 将 SELECT 语句存储到存储过程中的变量中

mysql - MySQL中如何替换包含特殊字符的长字符串