DELIMITER $$
CREATE
    FUNCTION `abgent_website`.`test4`()
    RETURNS varchar(255)
    BEGIN
    declare d varchar(50);
    declare dd int(20);
    declare i int(20);
    set i=0;
    set d = '';
    while (i!=5) do 
      set dd := (select id from t limit i,1);
      set i = i+1;
      set d = concat(d,',',dd);
    end while;
    set d = concat(d,',qq');
    return d;
    END$$
DELIMITER ;不知为什么,当把i换成真正整数就可以执行成功,那位什么我用变量就不行呢??

解决方案 »

  1.   

    set dd := (select id from t limit i,1);MySQL目前版本还不支持在 limit n,m 中使用变量 ,换种方法来实现吧,你想实现什么功能?
      

  2.   

    数据库中有一张自关联的类别表,就是子类和父类的关系,表中如果是父类的id,其标识是他的父类字段为空。所以我想纯用sql,来实现,通过一个id值,可以把本身id以及其子类的id,全查出来,由于mysql function不支持table或者数组,所以我想用字符串连接来实现这个功能,所以做了上面的例子,请您给点建议呗,谢谢
      

  3.   


    例如:有一张表叫category,里面有字段id,category_id,name等,category_id就是本身的id值,表中值如下:
     id     category_id
     1        null  是父类
     2        null  是父类
     3        1     3是1的子类
     4        1     4是1的子类  
     5        3     5是3的子类
     6        2     同理如下
     7        5
     .....
    当我传参数值id为1时,我要返回所有他和他子类的id值,即1,3,4,5,7,单用sql写函数怎么写呢?谢谢
      

  4.   

    参考下贴中现成的函数MySQL中进行树状所有子节点的查询 
    http://blog.csdn.net/ACMAIN_CHM/archive/2009/05/02/4142971.aspx