我的MySQL数据库中有一种类似于树的东西.
我有一个包含类别的数据库,每个类别都有一个subcat.我将所有类别保存在一个表中,因此列如下所示:
*categories table*
id | name | parent_id
1 | Toys | 0
2 | Dolls | 1
3 | Bikes | 1
Run Code Online (Sandbox Code Playgroud)
我的数据库中的每个项目都分配给以下类别之一:
*items table*
item | category_id
barbie | 2
schwinn| 3
Run Code Online (Sandbox Code Playgroud)
问题是,如果有人想要查看所有TOYS(父类别),从项目数据库中获取信息的最佳方法是什么?我知道如何做的事情的唯一方法
SELECT *
FROM items
WHERE category_id = 2
JOIN SELECT *
FROM items
WHERE category_id = 3
etc...
Run Code Online (Sandbox Code Playgroud)
但是,如果我在Toys下有10个类别,那么我必须进行10次加入和查询.
有没有更好的方法来处理这个?
我写了一个存储的FUNCTION,递归地调用自己.
但是,当我在查询中运行它时,我得到了这个无耻的错误:
错误:1424 SQLSTATE:HY000(ER_SP_NO_RECURSION)
消息:递归存储函数和触发器不允许的.
"不允许"?
对.为什么我们不只是禁用WHILE循环,而我们在它呢?
我可以以任何方式启用递归函数吗?
我发现了一个错误报告,但是有任何变通方法吗?
我在Windows XP(XAMPP Server)上运行MySQL 5.1.41.
mysql recursion stored-procedures user-defined-functions stored-functions
我有一个包含一个单一的表ID,Amount和Parent_ID.(实际上它有点复杂,但这是本例中的所有重要列).基本上我想要做的是将Amount列与最低公共父项(即父ID为NULL的那些)进行分组和求和.
ID Amount Parent_ID
1 100 NULL
2 150 1
3 50 1
4 75 3
5 25 4
6 125 NULL
7 50 6
8 50 7
9 100 8
Run Code Online (Sandbox Code Playgroud)
预期成绩:
ID SUM
1 400
6 325
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,它只会返回两个记录,即没有父级的记录,这意味着它们是顶级项目.Sum列是Amount递归所有子项的总和,因此ID= 1是1,2,3,4和5 ID的总和.= 6是6,7,8和9的总和.