在select语句中使用存储过程的mysql

0ejtzxu1  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(442)

我有这样一个存储过程:

$connection->query('
   drop procedure if exists listing_count;
   create procedure listing_count(IN parent int(11))
   begin
    declare count1 int(11) default 0;
    declare count2 int(11) default 1;
    create temporary table ids as (select id from category where id=parent);
    while count1<>count2 do
     set count1=(select count(id) from ids);
     insert into ids(id) select id from category where id not in(select id from ids) and related in(select id from ids);     
     set count2=(select count(id) from ids);
    end while;
    (select count(*) from listing_category where category in(select id from ids));
   end');

$fetch=$connection->query('select *,listing_count(id) as listing_count from category')->fetchall(pdo::FETCH_UNIQUE|pdo::FETCH_ASSOC);

我想用我的程序像一个函数。以便 listing_count 获取计数以便我可以使用它。我需要创建一个单独的函数吗?一个程序能得到我的计数并返回它吗?
把它变成这样一个函数:

drop function if exists listing_count;
   create function listing_count(parent int(11)) returns int(11) deterministic
   begin
    declare count1 int(11) default 0;
    declare count2 int(11) default 1;
    create temporary table ids as (select id from category where id=parent);
    while count1<>count2 do
     set count1=(select count(id) from ids);
     insert into ids(id) select id from category where id not in(select id from ids) and related in(select id from ids);     
     set count2=(select count(id) from ids);
    end while;
    return (select count(*) from listing_category where category in(select id from ids));
   end

但这行不通。我不太熟悉过程和函数,但我假设我不能像在过程中那样将所有功能添加到函数中。

z6psavjg

z6psavjg1#

我想用我的程序像一个函数。
你不能那样做™.
我建议您将sp转换为存储函数。无论如何,这是个好主意,因为它只返回一个值。按照现在的方式,它返回一个一列一行的结果集。如果它是一个函数,那么它在您需要的任何上下文中都很容易工作。相反,返回结果集的存储过程并不是那么容易使用。例如,请看这个。如何使用mysql存储过程的表输出
或者可以编写一个存储函数来 Package 存储过程并返回值。在我看来,这是一个低劣的解决方案,只是因为它有额外的复杂性。

相关问题