如何在 MySQL 中的 While 循环中选择行

问题描述 投票:0回答:1

我在 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
1个回答
0
投票

在 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; 结束一会儿;

© www.soinside.com 2019 - 2024. All rights reserved.