我在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/