2013-06-06 64 views
0

給定一個數字,我怎樣才能在MySql函數內循環基於該數字的一組數字?MySql在函數內部使用while循環

爲了得到一個更清晰的圖片,請參閱我的問題,我問了這樣的事情可以在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>` 
+0

MySQL的函數只返回一個標量值。因此,你無法完成你在php中完成的任務。更清楚地解釋你期望從你的功能中獲得什麼?如果你傳遞1作爲參數,你是否僅僅期望返回一個字符串'1,4,7'? – peterm

+0

不,我希望while循環遍歷數字1,4,7。結果是這樣的鏈接(例如1):'' – Norman

+0

'您想要這些鏈接作爲一個varchar值,或者您希望它們是行? – peterm

回答

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演示

+0

關閉,非常接近。我正在擺弄爲什麼連3和10都返回3個鏈接。 – Norman

+0

@Norman對不起,這是兩個函數的拼寫錯誤。更新了答案和sqlfiddle。 – peterm

+0

工作得很好。我會添加所有其他案例:) – Norman