MySQL WHERE条件字符串到数组

时间:2013-10-22 14:28:30

标签: mysql function where

我的陈述只返回1行

SELECT * FROM Users WHERE UserId IN(downwardsPartnersById(292));

因为我的自定义函数“downwardsPartnersById”返回一个varchar。

结果:“292,307,308”

条件“IN”需要一个数组:('292','307','308')但是我不能使用字符串,否则它将在第一个“,”处断掉字符串,并且只返回第一行使用UserId 292。

我尝试使用FIND_IN_SET函数,但似乎在WHERE中不起作用:

SELECT * FROM Users WHERE FIND_IN_SET(UserId, downwardsPartnersById(292)).

2 个答案:

答案 0 :(得分:2)

IN 需要一个集合,你拥有的是一个分隔的字符串。理想情况下,您应该让函数返回一个集合,但MySQL不支持表值函数。

所以另一个选项是FIND_IN_SET

SELECT * FROM Users WHERE FIND_IN_SET(UserId, downwardsPartnersById(292))

... which should work fine in your case。如果没有,那么:

  • 函数的返回值不是预期的

  • 或您的表格中不包含UserId列中的相关数据。

答案 1 :(得分:0)

您可以在IN语句中使用子查询,而不是使用存储过程返回ID字符串。

SELECT * FROM Users WHERE UserId IN(SELECT ID FROM <YourTable> WHERE PartnerID=292);

或存储过程正在进行的操作。

另一个选择是让存储过程返回列表而不是varchar。这在此概述:https://stackoverflow.com/a/4207881/2543917