我想创建一个mysql函数,可以使用column查找所有相关的祖先 related
在table上 category
然后使用所有这些祖先(子代、孙辈……)id(包括其自身)来查找这些id的所有示例 listing_category
使用列 category
.
类别
ID, Related
1,0
2,1
3,1
4,1
5,0
6,5
7,1
8,7
9,7
10,1
如果我选择1,那么2,3,4,7,10是它的孩子,8,9是它的孙子。
列表\u类别
Category
1
1
2
3
3
5
6
9
7
7
所以现在我想创建一个mysql函数,它可以在另一个名为 listing_category
```
create function listing_count(ID int(11)) returns int(11)
begin
declare count int(11);
set count=(select count(*) from listing_category where category=ID);
while (select id from category where related=ID) as childID and count<100 do
set count=count+listing_count(childID);
end while;
return count;
end
所以呢 `listing_count(1)` 会在里面找到所有的亲戚2,3,4,7,10,8,9 `category` 然后计算内部1,2,3,4,7,10,8,9的所有示例 `listing_category` . 因此,在本例中将返回计数8。
mysql存储过程可能吗?
2条答案
按热度按时间lokaqttq1#
可以使用递归存储过程来实现这一点。这样做的好处是,无论祖先(如子女、孙子、曾孙等)有多深,它都能工作。
使用您的数据,此查询将生成预期结果(8):
如果您真的想要一个函数,您可以将过程 Package 在一个函数中(因为mysql不允许您创建递归函数):
输出:
carvr3hs2#
如果希望所有相关的类别都在一列中,则需要合并l1(仅一行)、l2和l3中的所有id。
一旦你有了所有的身份证,你就可以得到计数了:
下面是一个查询,它将为您统计记录: