我正在尝试创建一个MySql查询,它将在2个循环中使用CONCAT函数构造一个字符串。
我想知道字符串是否可以用作变量和表中字段的引用?
到目前为止,我的代码如下所示,它在UPDATE行附近返回了一些语法错误:
...
WHILE x <= 5 DO
WHILE y <= 3 DO
SELECT @str_data = CONCAT(str,'data_',x);
SELECT @str_data = CONCAT(str,'_',y);
SELECT @variable:= @str_data FROM sometable WHERE id = '@counter + y';
UPDATE anothertable SET @str_data = @variable WHERE id = '@counter + y';
SET y = y + 1;
END WHILE;
SET x = x + 1;
SET @counter = counter + 3;
END WHILE;
我已经检查了所有变量的设置。
在旁注中我可能没有正确使用concat,因为我看到它在多个示例中的使用方式不同。我打算这样做 格式最终为:'data_x_y'。 (通过将'_y'添加到当前字符串的末尾。:=?)
答案 0 :(得分:1)
让我们从头开始: 更改此代码:
SELECT @str_data = CONCAT(str,'data_',x);
SELECT @str_data = CONCAT(str,'_',y);
致:
SET @str_data = CONCAT(str, 'data_',x,'_',y);
我想知道为什么要将DECLARE变量(str)与@vars *(@ str_data)*混合使用,它看起来很混乱。
所以这段代码:SELECT @variable:= @str_data FROM sometable WHERE id = @counter + y;
不按照您的想法行事。只需选择@str_data
0次或更多次,同时设置@variable
如果您希望MySQL添加'
,则需要从中删除@counter + y
引号,因为引号只会评估为0且不匹配。
此代码不正确:
UPDATE anothertable SET @str_data = @variable WHERE id = '@counter + y';
将其更改为:
UPDATE anothertable SET fieldx = @variable WHERE id = @counter + y;
请注意,SQL不是php,您不能将@vars用作动态列名的占位符 这没有任何意义 我猜你试图想出一个包含动态列名的字符串并对该列进行更新 忘记使用这种方法,它永远不会在SQL中工作,这也不是SQL的工作方式。
该怎么做
将您的表格更改为此格式
Table proper
x integer
y integer
value varchar
otherfields .....
现在您可以使用
进行更新 UPDATE proper SET value = @var WHERE x = 1 and y = 2;
更清洁,更快。