MySql在函数内部使用while循环

时间:2013-06-06 07:06:18

标签: mysql sql

给定一个数字,如何在MySql函数内循环基于该数字的一组数字?

为了获得更清晰的图片,请查看我的问题,我问在PHP中如何完成这样的事情。 Question here.

我正在做select myfunction(thenumber)。根据这个数字,我得循环。

截至目前,

If thenumber = 1 then loop backward thru 1,4,7 only
If thenumber = 2 then loop thru 3
If thenumber = 3 then loop thru 10 

这是我一直在摆弄的功能。

CREATE DEFINER=`root`@`localhost` FUNCTION `whileloop`(`danum` VARCHAR(2050))
    RETURNS varchar(1500)
    LANGUAGE SQL
    NOT DETERMINISTIC
    CONTAINS SQL
    SQL SECURITY DEFINER
    COMMENT ''
BEGIN
DECLARE x  INT;
DECLARE str  VARCHAR(255);
SET x = danum;
SET str =  '';
#If x = 1, while = 1, 4, 7////////
WHILE x  >= 1 DO //I'm stuck here
SET  str = CONCAT(str,x,',');
SET  x = x - 1; 
END WHILE;
RETURN str;
END

我怎么能在MySql函数里面做什么,我做了什么php。在php中,我们将事物存储在一个数组中。我们怎么能在这里做到这一点?

修改

结果

我最终试图摆​​脱的是链接。

So if `thenumber = 1`
`<a href=foo.php?id=1> <a href=foo.php?id=4> <a href=foo.php?id=7>` //3 Links Output in a single row
If `thenumber = 2`
`<a href=foo.php?id=3>` //Same as above. Output in a single row.
If `thenumber = 10`
`<a href=foo.php?id=10>`

1 个答案:

答案 0 :(得分:1)

你在找这个吗?

CREATE FUNCTION mylink(n INT)
RETURNS VARCHAR(512) DETERMINISTIC
RETURN CONCAT('<a href=foo.php?id=',n,'>');

CREATE FUNCTION myfunction(n INT)
RETURNS VARCHAR(512) DETERMINISTIC
RETURN CASE n
    WHEN 1 THEN CONCAT(mylink(1), mylink(2), mylink(7))
    WHEN 2 THEN mylink(3)
    WHEN 3 THEN mylink(10)
END;

使用它

SELECT myfunction(n) links
FROM 
(
  SELECT 1 n UNION ALL SELECT 2 UNION ALL SELECT 3
) a

输出:

|                                                           LINKS |
-------------------------------------------------------------------
| <a href=foo.php?id=1><a href=foo.php?id=2><a href=foo.php?id=7> |
|                                           <a href=foo.php?id=3> |
|                                          <a href=foo.php?id=10> |

这是 SQLFiddle 演示