提问人:Derek Olson 提问时间:1/31/2023 最后编辑:aynberDerek Olson 更新时间:3/23/2023 访问量:74
MySQL Workbench - 我想遍历 100 个名为“1”-“100”的列
MySQL Workbench - I want to loop through 100 columns which are named `1`-`100`
问:
我正在使用 MySQL Workbench。我正在尝试使用循环生成的随机虚拟数据构建一个表。我想遍历 100 列,这些列名为 1-100。如何做到这一点?
这是我目前所拥有的。我收到错误代码:1054 “字段列表”中的未知列“count”。
DELIMITER $$
DROP PROCEDURE IF EXISTS insertUsingLoop3$$
CREATE PROCEDURE insertUsingLoop3()
BEGIN
DECLARE count INT DEFAULT 0;
DECLARE randValue INT DEFAULT 33;
WHILE count < 101 DO
SET randValue = FLOOR( RAND() * (127-33) + 33);
INSERT INTO test1(count)
VALUES(CHAR(randValue));
SET count = count + 1;
END WHILE;
END$$
DELIMITER ;
我希望使用变量 - 'count' 作为列名,因为我使用数字 1 - 100 命名了 100 列。
答:
0赞
s.abbaasi
1/31/2023
#1
您可以将查询创建为字符串,然后执行它。 在您的情况下,查询可能如下所示:
WHILE count < 101 DO
SET randValue = FLOOR( RAND() * (127-33) + 33);
SET @q = CONCAT('INSERT INTO test1(c', count,') VALUES(CHAR(',randValue, '))');
PREPARE stmt FROM @q;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
SET count = count + 1;
END WHILE;
评论
0赞
Derek Olson
1/31/2023
感谢您的快速回复!我收到以下错误。14:13:13 调用 insertUsingLoop3() 错误代码:1064。您的 SQL 语法有错误;查看与您的MySQL服务器版本相对应的手册,了解在第1行的“33) VALUES(CHAR( 88))”附近使用的正确语法 0.000秒
0赞
s.abbaasi
1/31/2023
@DerekOlson,我认为问题出在您的列名上。我编辑了答案,并假设列名以字母“c”开头。例如。。。而不是。。。试试这个,如果你有任何问题,请告诉我。c1
c2
1
2
0赞
Derek Olson
2/1/2023
@P.Salmnon:不,我不是说要有一列,而是要有100列。我将尝试更改表格,在名称前面预置“c”,然后重试。我正在尝试不同的事情。也使用 php 来执行循环。这对我来说似乎更容易,因为我比 sql 更熟悉它。
0赞
s.abbaasi
2/6/2023
@DerekOlson,您需要将其放入一个过程中并调用它。
0赞
Derek Olson
2/1/2023
#2
将PHP与WAMP一起使用,我能够找到我想要做的事情的解决方案。这是我想出的。
function insColmns() {
// loop through columns named '1', '2', ... '98', '99', '100'
$counter1 = 1;
$colmns = '';
while($counter1 <= 100) {
$strCounter1 = (string) $counter1;
if($counter1 < 100) {
$colmns .= 'c' . $strCounter1 . ', ';
} else {
$colmns .= 'c' . $strCounter1;
}
$counter1++;
}
return $colmns;
}
function insData() {
// loop to insert random character into each of the columns
$counter2 = 1;
$data = '';
while($counter2 <= 100) {
$randValue = rand(384,591);
$unicodeChar1 = (string) mb_chr($randValue);
if($counter2 < 100) {
$data .= '"' . $unicodeChar1 . '", ';
} else {
$data .= '"' . $unicodeChar1 . '"';
}
$counter2++;
}
return $data;
}
$sql = 'INSERT INTO testing.sample2 (' . insColmns() .
')
VALUES (' . insData() . ')';
评论
0赞
Derek Olson
2/1/2023
感谢所有帮助我解决这个问题的人!我学到了很多东西!
上一个:MySQL 变量作为通配符字符串
下一个:在查询中使用别名并使用它
评论