MySQL查询,如何在多种方式使用字符串?

时间:2011-06-04 11:09:56

标签: php mysql

我正在尝试创建一个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'添加到当前字符串的末尾。:=?)

1 个答案:

答案 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;

更清洁,更快。