Mysql - 其中IN子句没有正确选择数据

时间:2014-09-22 10:22:22

标签: php mysql sql select

我用单引号将逗号分隔的字符串

  1. select * from demoProject WHERE id IN(1,2,3);

  2. set @ids := "'1,2,3'"; select * from demoProject WHERE id IN(@ids)

  3. 第一个查询工作正常,但第二个查询仅获取关联ID为“1”的数据。第二次查询我错在哪里?

3 个答案:

答案 0 :(得分:0)

尝试从

更改您的ID
set @ids := "'1,2,3'";

set @ids := "'1','2','3'";

答案 1 :(得分:0)

它不起作用,因为@ids被视为字符串。隐式转换为整数将始终只是第一个数字。

使这项工作的唯一方法是使用预准备语句(在这种情况下必须在存储过程中使用):

DELIMITER $$
CREATE PROCEDURE sp_prep_stmt(IN ids int)
BEGIN
SET @sql = 'select * from demoProject WHERE id IN(?);';
PREPARE stmt FROM @sql;
EXECUTE stmt USING ids;
DEALLOCATE PREPARE stmt;
END $$
DELIMITER ;

然后使用

执行该过程
CALL sp_prep_stmt('1, 2, 3');

答案 2 :(得分:0)

此处的问题是您将STRING插入IN语句,以便获得条件:id IN('1,2,3')。在这种情况下,您应该使用动态sql。

同样在MySQL中,您可以使用FIND_IN_SET()函数在逗号分隔的STRING中查找数字。所以它可以在这里提供帮助:

set @ids := "'1,2,3'"; select * from  demoProject WHERE FIND_IN_SET(id,@ids);