我在 MySQL 中有一个表(代表矩阵),如下所示:
CREATE TABLE matrices
(
matrix_id varchar(50),
`row` INT,
`column` INT,
`value` float(24)
);
我将以下值插入表中以定义矩阵:
-- INSERT MySQL
INSERT INTO matrices
(matrix_id, `row`, `column`, `value`)
VALUES
('m1', 1, 1, 1),
('m1', 1, 2, 2),
('m1', 1, 3, 3),
('m1', 2, 1, 4),
('m1', 2, 2, 5),
('m1', 2, 3, 6);
我使用以下查询来显示矩阵,使得矩阵特定行的所有值应出现在第一行,对于矩阵的第二行,它应出现在第二行
-- loop for printing
SET @counter = 1;
SET @m_id = 'm1';
SET @r = (SELECT max(`row`) from matrices where matrix_id = @m_id);
WHILE @counter <= @r DO
BEGIN
SELECT GROUP_CONCAT(`value`, SEPARATOR ' ') FROM matrices where
matrix_id = @m_id and `row` = @r
SET @counter = @counter + 1
END WHILE;
但是我的 MySQL While 循环似乎有问题。
此处使用的 While 循环的正确语法是什么? 注意:我在 onecompiler.com 上使用 MySQL。
我希望输出看起来像这样:
1 2 3
4 5 6
在 MySQL 中,通常不使用 while 循环进行行迭代;相反,您可以利用 SQL 的基于集合的操作。这是实现您想要的目标的正确方法:
设置@m_id = 'm1'; SET @r = (SELECT max(
row
) FROM 矩阵,其中matrix_id = @m_id);
设置@计数器= 1;
同时@counter <= @r DO SELECT GROUP_CONCAT(
value
订购依据 column
ASC 分隔符 ' ')
从矩阵
其中,matrix_id = @m_id AND row
= @counter;
设置@counter = @counter + 1;
结束一会儿;