0

我需要向表中的特定字段添加 2 个不同的单词。

表是:

field1, field2 and field3

所以首先我需要选择我想要更改的记录:

SELECT * FROM MyTable where field3 = 1

假设结果是 10 条记录。

我现在有 2 个变量 var1 和 var2

我现在需要将 var1 添加到表的 field2 的 50% 并将 var2 添加到其他 50%

我怎样才能做到这一点?

例子:

桌子:

  id | field2 | field3
-----------------------------
  1    hello      1
  2    hello2     1

字符串 1 字符串 2

选择 * from mytable where field3 = 1

将返回 2 个字段...

下一个...

将 String1 插入到 50% 的结果中,将 String2 插入到 field2 上其他 50% 的结果中

输出应该是:

  id | field2         |  field3
-----------------------------
  1    String1 hello      1
  2    String2 hello2     1
4

2 回答 2

1

获取计数行以进行更新。

select count(*) cnt 
from MyTable 
where field3 = 1;

并在 php 将结果存储到变量 $cnt 中,还计算范围之间的中间点。

$middle = ceil($cnt/2);

然后运行以下查询(当然不要忘记转义 sql 中传递的变量的值):

update MyTable a,
      (SELECT @rownum:=0) b
set field2 = concat(field2, if((@rownum := @rownum+1) > $middle, '$var1', '$var2'))     
where field3 = 1;

下面的例子:

<?php

$conn = mysqli_connect('localhost', 'user', 'pass', 'dbtest');
$rs = mysqli_query($conn, "select count(*) cnt from MyTable where field3 = 1");
$row = mysqli_fetch_assoc($rs);
$cnt = $row['cnt'];
$middle = ceil($cnt/2);
$var1 = 'xxx';
$var2 = 'yyy';
mysqli_query(
    $conn, 
    "update MyTable a,
           (SELECT @rownum:=0) b
     set field2 = concat(field2, if((@rownum := @rownum+1) > $middle, '$var1', '$var2'))     
     where field3 = 1
    "
); 
于 2013-11-13T17:14:59.823 回答
0

我不知道这是否适用于 mysql,但我建议这样(ms sql server 语法):

update mytable
set field2 = case when ROW_NUMBER() over (order by id)%2 = 0
                  then 'var1' + field2
                  else 'var2' + field2
             end
where field3 = 1

或者如果您不想更新表格而只选择值:

select field1
     , case when ROW_NUMBER() over (order by 1d)%2 = 0
            then 'var1' + field2
            else 'var2' + field2
       end as field2
     , field3
 where field3 = 1

它将“var1”添加到偶数行,将“var2”添加到奇数行。用您的变量替换“var1”和“var2”。

它的工作原理是对每个行号取模 2,从而查看结果集的行号是偶数还是奇数。然后它根据行号是偶数还是奇数放入 var1 或 var2。

于 2013-11-13T16:51:17.393 回答