PHP SQL 将单词添加到 mysql 表中的特定记录


PHP SQL Add words to specific record in mysql table

我需要在表格中的特定字段中添加 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

从我的表中选择 *,其中字段 3 = 1

将返回 2 个字段...

下一个。。。

将字符串 1 插入到结果的 50% 中,将字符串 2 插入到字段 2 上其他 50% 的结果

输出应为:

  id | field2         |  field3
-----------------------------
  1    String1 hello      1
  2    String2 hello2     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
    "
); 
我不知道

这是否适用于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。