2014-03-06 95 views
1

我有一個像下面這樣的MySQL表。如何在MySql表中選擇每行N次?

ID   NAME   SURNAME 
1   Joe   Black 
2   Mary   Peterson 
3   Bob   Marley 
4   Andy   Murray 
... 

我想寫一個SELECT命令ň次返回的每一行。
實施例,對於N = 3

SELECT NAME, SURNAME blah-blah (3 Times) FROM Person 
NAME    SURNAME 
Joe    Black 
Joe    Black 
Joe    Black 
Mary    Peterson 
Mary    Peterson 
Mary    Peterson 
Bob    Marley 
Bob    Marley 
Bob    Marley 
Andy    Murray 
Andy    Murray 

謝謝。

+2

數據顯示的問題通常最好在表示層/應用程序級代碼中處理(例如,PHP循環) – Strawberry

+0

我建議使用腳本語言而不是sql(*如果有方法*) ! – NoobEditor

+0

這不是一個好主意,當創建一個多行時,實際上你正在檢索DB中的實際數據 –

回答

2

你可以使用UNION ALL來獲得你想要的結果,但你最好不要用SQL來完成這樣的工作。

SELECT * FROM 
(
    SELECT NAME, SURNAME FROM Person 
    UNION ALL 
    SELECT NAME, SURNAME FROM Person 
    UNION ALL 
    SELECT NAME, SURNAME FROM Person 
) A ORDER BY NAME 
1

裝聾作啞的手動方法是:

SELECT NAME, SURNAME FROM Person 
UNION ALL 
SELECT NAME, SURNAME FROM Person 
UNION ALL 
SELECT NAME, SURNAME FROM Person 

另一種方法是有數字的表在單個列運行到最大和做與它交叉聯接WHERE number <= n

+0

謝謝@Strawberry,顯然沒有集中在那裏 – neelsg

1

我不會建議SQL來實現這一目標,一個更簡單的方法是(假設PHP):

$result = $mysqli->query("SELECT NAME, SURNAME blah-blah (3 Times) FROM Person"); 

while($result_set = $result->fetch_array()) 
{ 

    for($i=0;$i<4;$i++) 
    { 
    echo $result_set['name']." ".$result_set['sur_name']."\n"; 
    } 
} 

這會給你一個更好的器上的結果集以及,你可以有更多的動態處理方式,數據如何顯示在頁面上,

for。例如,如果你想要一個特定的名字只被打印一次,簡單的if比較會做,這是不可能通過sql!

1
SELECT NAME, SURNAME FROM Person, (SELECT * FROM Person limit 3) count_table; 
1

約何去何從通過在存儲過程中的循環會這樣:

delimiter // 
CREATE PROCEDURE ntimes() 
BEGIN 
DECLARE i INT DEFAULT 0; 
SET i = 0; 
WHILE i < 3 DO 
SELECT `Code`, `Rank` FROM Table1; 
SET i = i + 1; 
END WHILE; 
END; 
// 
DELIMITER ; 

在這裏你只需要改變3到你想要的重複次數,並且你不需要工會的質量。