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