在MYSQL函数中的IN查询

时间:2013-02-21 10:24:24

标签: mysql

我需要将存储过程中的逗号分隔项目ID传递给函数

存储过程

CREATE PROCEDURE `spGetData`(
)
BEGIN

SET SESSION group_concat_max_len = 10000000;
set @leadProjectIDs = (SELECT distinct cast(group_concat(ProjectID separator ',')
                     as  char(10000000))
                    from
                    project pr where Status = 2);

select fnCount(@leadProjectIDs) as Count;
END

功能是

CREATE FUNCTION `fnCount`(
                 _projectIds varchar(800)
       ) RETURNS decimal(10,2)
 Begin

   Set @LeadsCount = (Select count(*) from project where projectid in(_projectIds));
   return @LeadsCount;
END

但是上面的功能不会返回任何计数。

我在这里提到的SP和函数只是例如,我使用Function来获取数据,因为它有更多的条件,然后在这里提到加入。

所以我只想知道,我如何通过1,2,3,4等项目并从MYSQL中的函数获取结果。

1 个答案:

答案 0 :(得分:0)

尝试使用INSTR功能:

CREATE FUNCTION `fnCount`(
                 _projectIds varchar(800)
       ) RETURNS decimal(10,2)
 Begin

   Set @LeadsCount = (Select count(*) 
                        from project 
                       where INSTR(_projectIds, concat(',', projectid, ',')) > 0);
   return @LeadsCount;
END

确保_projectIds参数中的每个项目都具有格式,projectid,。另外,请注意,可以在该字符串上连接项目ID的限制,它可能会在某些时候爆炸。