MySQL 创建可以声明和设置选择结果的存储函数

Posted

技术标签:

【中文标题】MySQL 创建可以声明和设置选择结果的存储函数【英文标题】:MySQL Create stored function that can declare and set select results 【发布时间】:2018-04-26 17:24:49 【问题描述】:

我想从两个表中收集 id,合并这些表以使用 IN 语句来找出 count(*),如下所示:

   drop function if exists listing_count;
   create function listing_count(parent int(11)) returns int(11) deterministic 
   begin 
    declare count int(11) default 0;
    declare ARRAY1;
    declare ARRAY2;
    set ARRAY1=(select id from category1); 
    set ARRAY2=(select id from category2); 
    set count=(select count(*) from listing_category where category in(ARRAY1+ARRAY2));
    return count;
   end

是否可以设置和声明选定的结果(ARRAY1 和 ARRAY2)以供以后使用? 我不想将所有内容合并到一个查询中

【问题讨论】:

很好奇你为什么不想要一个查询。另外,这些表之间有什么关系(如果有的话)? 我想在 while 循环中使用数组来收集大量数据,然后在 in 语句中使用它。 @保罗坎贝尔 您能否在您的问题中添加一些用于此数据收集步骤的伪代码。 IN() 需要一个逗号分隔的列表,而不是一个数组,我可以向您展示如何使用游标创建它。但是,我怀疑您正在尝试的内容可以通过 JOINS(可能还有临时表)更好地实现,因此在提出任何建议之前查看您希望如何使用这些数据的完整图片会很有用。 【参考方案1】:

mysql 没有数组,你只能在一个变量中存储一个值。您可以使用WHERE category INUNION 中的子查询来组合这两个表。

SELECT COUNT(*) 
FROM listing_category
WHERE category IN (
    SELECT id FROM category1
    UNION
    SELECT id FROM category2
);

或者使用JOIN:

SELECT COUNT(*)
FROM listing_category
JOIN (        
    SELECT id FROM category1
    UNION
    SELECT id FROM category2
);

【讨论】:

以上是关于MySQL 创建可以声明和设置选择结果的存储函数的主要内容,如果未能解决你的问题,请参考以下文章

mysql中怎么存储数组

MySQL进阶19--函数的创建(举例)/设置mysql的创建函数的权限/查看(show)/删除(drop) / 举4个栗子

MySQL函数

ORACLE存储过程里可以声明过程和函数吗

Java中自定义类和基本类型声明的数组,在对内存中存储的内容、方式和内存地址指向方面有啥区别?

mysql为四个表创建储存过程或者储存函数