此函数当前获取比父类别低一级的子类别。我们知道父类别 ($category_id),它会检查子类别并正确返回结果。
// list category for the category (type)
function getCategoryItemsList($category_id) {
$cat_list = $category_id;
// check for child category
$sql = "select category_id from category where category_parent_id = $category_id ";
$cat_ids = getSqlResult($sql, SQL_RESULT_ALL);
foreach($cat_ids as $item) {
$cat_list = $cat_list . ',' . $item['category_id'];
}
return $cat_list;
}
问题是当我们有多个类别级别时,例如:
parent > child >孙子>曾孙
如何返回父级的所有子类别级别?
///// MYSQL CATEGORY DB
category_id category_name category_parent_id
1 shoes 0
2 blue shoes 1
3 men blue shoes 2
4 men blue shoe small 3
5 red shoes 1
6 men red shoes 5
7 shirts 0
$category_id='1' 为 2,3,4,5,6 时的预期结果
最佳答案
试试这个:
create table category(
id int,
name varchar(100),
parent_id int
);
insert into category values
(1, 'shoes', 0),
(2, 'blue shoes', 1),
(3, 'men blue shoes', 2),
(4, 'men blue shoe small', 3),
(5, 'red shoes', 1),
(6, 'men red shoes', 5),
(7, 'shirts', 0);
SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
SELECT @pv:=(SELECT GROUP_CONCAT(id SEPARATOR ',') FROM category WHERE
FIND_IN_SET(parent_id, @pv)) AS lv FROM category
JOIN (SELECT @pv:=1)tmp
WHERE parent_id IN (@pv)) a;
输出:
mysql> SELECT GROUP_CONCAT(lv SEPARATOR ',') FROM (
-> SELECT @pv:=(SELECT GROUP_CONCAT(id SEPARATOR ',') FROM category WHERE
-> FIND_IN_SET(parent_id, @pv)) AS lv FROM category
-> JOIN (SELECT @pv:=1)tmp
-> WHERE parent_id IN (@pv)) a;
+--------------------------------+
| GROUP_CONCAT(lv SEPARATOR ',') |
+--------------------------------+
| 2,5,3,6,4 |
+--------------------------------+
1 row in set (0.00 sec)
该解决方案基于that answer
关于mysql - 父类别的所有子类别列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35141255/