回答
通常我所做的是創建一個表(通常是一個臨時表)並用存儲過程填充它。
CREATE TABLE `numTable` (
`Id` int(11) NOT NULL auto_increment,
PRIMARY KEY (`Id`)
)//
CREATE PROCEDURE dowhile(IN tableLimit INT)
BEGIN
DECLARE pointer INT DEFAULT tableLimit;
WHILE pointer > 0 DO
INSERT numTable VALUES (NULL);
SET pointer = pointer - 1;
END WHILE;
END//
CALL dowhile(100)//
現在你可能需要使用DELIMITER
但出於一致性的緣故,我剛纔複製的內容在SQL小提琴曾通過設置模式分隔符是//
(向前按鈕波紋管架構窗口)
然後從那裏我然後通過給每行一個組ID來做這個表的選擇。因爲你想要10個我已經設置組爲10的倍數,然後通過使用GROUP_CONCAT
這個組ID使這些行。
select myRow
from (
SELECT group_concat(id SEPARATOR ', ') as `myRow`, CEIL(id/10) as `groupId`
FROM numTable group by `groupID`) as myTable;
,因爲我們不希望顯示組ID,然後我讓這個子選擇,只有選擇我的新行。如果你在PHP或C#中使用它來輸出行,你可以做一個選擇,因爲你不必輸出從查詢結果中得到的所有東西。
社區wiki答案,以免收集點數。隨意編輯。
select theAnswer
from
( select @rn:[email protected]+1 as rownum,
concat(1+(@rn-1)*10,' ',2+(@rn-1)*10,' ',3+(@rn-1)*10,' ',4+(@rn-1)*10,' ',5+(@rn-1)*10,' ',
6+(@rn-1)*10,' ',7+(@rn-1)*10,' ',8+(@rn-1)*10,' ',9+(@rn-1)*10,' ',10+(@rn-1)*10,' ') as theAnswer
from (select @rn:=0) params1
cross join (select 1 union select 2 union select 3 union select 4 union select 5 union select 6 union select 7 union select 8 union select 9 union select 10) params2
) xDerived;
+---------------------------------+
| theAnswer |
+---------------------------------+
| 1 2 3 4 5 6 7 8 9 10 |
| 11 12 13 14 15 16 17 18 19 20 |
| 21 22 23 24 25 26 27 28 29 30 |
| 31 32 33 34 35 36 37 38 39 40 |
| 41 42 43 44 45 46 47 48 49 50 |
| 51 52 53 54 55 56 57 58 59 60 |
| 61 62 63 64 65 66 67 68 69 70 |
| 71 72 73 74 75 76 77 78 79 80 |
| 81 82 83 84 85 86 87 88 89 90 |
| 91 92 93 94 95 96 97 98 99 100 |
+---------------------------------+
的from ()
的內部的東西是一個派生表,每個派生的表需要一個別名,也就是xDerived
。
@rn
是一個行號變量。它在params1
派生表中初始化。一排。
params2
是另一個派生表,其中第1到第10行爲值。
cross join
創建一個1x10的cartesian product(所有排列組合),結果爲10行,@rn
隨每行增加。
由於我們只希望輸出一列,所以外層包裝只爲一列進行最終選擇,以避免輸出行號列。
如果想在mysql中使用WHILE DO
循環,可以使用存儲過程。
select group_concat(seq order by seq separator ' ')
from seq_1_to_100
group by (seq-1) div 10;
| group_concat(seq order by seq separator ' ') |
|----------------------------------------------|
| 1 2 3 4 5 6 7 8 9 10 |
| 11 12 13 14 15 16 17 18 19 20 |
| 21 22 23 24 25 26 27 28 29 30 |
| 31 32 33 34 35 36 37 38 39 40 |
| 41 42 43 44 45 46 47 48 49 50 |
| 51 52 53 54 55 56 57 58 59 60 |
| 61 62 63 64 65 66 67 68 69 70 |
| 71 72 73 74 75 76 77 78 79 80 |
| 81 82 83 84 85 86 87 88 89 90 |
| 91 92 93 94 95 96 97 98 99 100 |
一個通用的解決方案:
set @num_cols := 10;
set @max := 100;
select group_concat(seq order by seq separator ' ')
from seq_1_to_1000000
where seq <= @max
group by (seq-1) div @num_cols
order by min(seq);
如果你想把它們都在一個單元格:
select group_concat(col separator '\n')
from (
select group_concat(seq order by seq separator '\t') as col
from seq_1_to_1000000
where seq <= @max
group by (seq-1) div @num_cols
) drv
想擁有列?
set @num_cols := 7;
set @num_rows := 3;
set @sql := (
concat('select ', (
select group_concat('(seq-1)*', @num_cols, '+', seq, ' as c', seq)
from seq_1_to_1000000
where seq <= @num_cols
),' from seq_1_to_1000000 where seq<=', @num_rows)
);
prepare stmt from @sql;
execute stmt;
| c1 | c2 | c3 | c4 | c5 | c6 | c7 |
|----|----|----|----|----|----|----|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
如果您沒有序列插件的MariaDB,您可以創建一個帶有序列號的輔助表。問德魯如何做到這一點:-)
永久助手錶,是的。特別是對於日期:p – Drew
如果RDBMS不能幫助您,您需要幫助RDBMS :-) –
- 1. 從1到100打印偶數,每行5個數字
- 2. 打印數字1到100在10列
- 3. 如何在Prolog中將數字從1打印到100?
- 4. 我想打印從-100到100的隨機數字
- 5. 從1-100中打印數字作爲Python中的單詞3
- 6. 每行打印11個數字?
- 7. 打印每行文字的隨機數
- 8. 打印每行
- 9. 打印素數小於100
- 10. HTML到Excel - 打印第1行
- 11. linux nasm程序集打印從零到100的所有數字
- 12. 如何打印100?
- 13. 對於數字1到100的Java REGEX
- 14. 1到100之間的數字之和
- 15. 每行打印60個字符
- 16. 當我要求Python將數字乘以100時,它會打印數字100次?
- 17. 如何打印包含1的數字?
- 18. ForEach Array打印數字1-200
- 19. 如何從1-9999打印數字?
- 20. 每行放100個字
- 21. 函數不打印1到10排列
- 22. 打印此行數字infront
- 23. 每行字符數限制的打印行
- 24. 找到並打印每一個獨特的組合,總計爲100,並返回所有這些組合的計數數字1和100
- 25. Python字典打印每行一個,每行有一個鍵位
- 26. 打印每句第三字
- 27. 打印每五個字符
- 28. 打印每一個字plof
- 29. awk中:打印每一行
- 30. 每頁僅打印50行
不錯的工作Memor-X – Drew