有这个 where 子句:
第一个和第二个占位符?可以有值: 1 || NULL
第三个占位符是动态添加的(数组)
IF(ISNULL(?),1,xy.id) IN
(IF(ISNULL(?),1,(SELECT x.id FROM x WHERE name IN (?))))
我需要这种类型的 isnull 检查,因为我希望如果发送的数据为 null,则该子句始终返回 true。基本上 if data is null 子句将是 1 IN 1
,如果它不为 null 找到对应的 ids ,但是 if()
函数限制我只返回 1 个结果(不是除了在 php 中动态构建整个查询之外,我这里还有什么选项?
最佳答案
您可以在 where
子句中执行此操作
WHERE (ISNULL(?) OR xy.id IN (SELECT x.id FROM x WHERE name IN (?)))
关于mysql : workaround for if() returning >1 row,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13092239/