我用存储过程如下:
CREATE DEFINER=`root`@`localhost` PROCEDURE `p2`()
BEGIN
DECLARE p1 int;
declare str char(50);
declare i int;set str='';
set p1=0;
set i=0;
/*循环是为了循环出10个数:比如 str=2','10','4','0','9','4','3','3','5','9 */
label1:loop
set i=i+1;
SET p1 = rand()*10;
set str=CONCAT(str,p1);
    IF i < 10 THEN 
    set str=CONCAT(str,''',''');
    ITERATE label1;     
    END IF;
leave label1;
end loop label1;
select str;/*查看str的值*/
select * from a where id in (str);
END;
在过程中创建了一个 str的字符串,比如str=2','10','4','0','9','4','3','3','5','9然后select * from a where id in (str);
但是结果总是只有id=2这个记录如果把str=2,10,4,0,9,4,3,3,5,9,还是上面的问题.如果我这样测试(直接把str的值写入in中),如 select * from a where id in (2','10','4','0','9','4','3','3','5','9);
却可以成功显示10条件记录请问应该如何写 str的,谢谢

解决方案 »

  1.   


    改用FIND_IN_SET()
    select * from a where FIND_IN_SET(id,str)MySQL官方文档 http://dev.mysql.com/doc/refman/5.1/zh/index.html
      

  2.   

    select * from a where find_in_set(id,str); 
      

  3.   

    FIND_IN_SET(str,strlist) 
    假如字符串str 在由N 子链组成的字符串列表strlist 中, 则返回值的范围在 1 到 N 之间 。一个字符串列表就是一个由一些被‘,’符号分开的自链组成的字符串。如果第一个参数是一个常数字符串,而第二个是type SET列,则   FIND_IN_SET() 函数被优化,使用比特计算。如果str不在strlist 或strlist 为空字符串,则返回值为 0 。如任意一个参数为NULL,则返回值为 NULL。 这个函数在第一个参数包含一个逗号(‘,’)时将无法正常运行。  mysql> SELECT FIND_IN_SET('b','a,b,c,d');
      

  4.   

    mysql> SELECT FIND_IN_SET('b','a,b,c,d');        -> 2