PHP SQL向mysql表中的特定记录添加单词
我需要在表中的特定字段中添加两个不同的单词 表为:PHP SQL向mysql表中的特定记录添加单词,php,mysql,sql,Php,Mysql,Sql,我需要在表中的特定字段中添加两个不同的单词 表为: field1, field2 and field3 因此,首先我需要选择要更改的记录: SELECT * FROM MyTable where field3 = 1 假设结果是10条记录 我现在有两个变量var1和var2 我现在需要将var1添加到表的field2的50%,将var2添加到其他50% 我该怎么做 例如: 表: id | field2 | field3 ----------------------------- 1
field1, field2 and field3
因此,首先我需要选择要更改的记录:
SELECT * FROM MyTable where field3 = 1
假设结果是10条记录
我现在有两个变量var1和var2
我现在需要将var1添加到表的field2的50%,将var2添加到其他50%
我该怎么做
例如:
表:
id | field2 | field3
-----------------------------
1 hello 1
2 hello2 1
String1
String2
从mytable中选择*字段3=1
将返回2个字段
接下来
在字段2上,将String1插入结果的50%,将String2插入结果的其他50%
输出应为:
id | field2 | field3
-----------------------------
1 String1 hello 1
2 String2 hello2 1
我不知道这是否适用于mysql,但我建议这样做(ms sql server语法): 或者,如果不希望更新表,而只选择值:
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。获取要更新的计数行
select count(*) cnt
from MyTable
where field3 = 1;
并在php中将结果存储到变量$cnt中,同时计算范围之间的中间点
$middle = ceil($cnt/2);
然后运行以下查询(当然不要忘记转义sql中传递的变量的值):
示例如下:
<?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
"
);
是否要将field2值拆分为两个变量的50%?只需将var1的内容插入结果的一半,将var2的内容插入另一半即可。字段2的…不替换,只需添加到字段2即可。。您能提供一个示例数据集,并解释它应该如何更新的逻辑吗?表单有字段。表有行和列。一旦你处理了这个问题,考虑提供适当的DDL和/或SQL LFIDLE连同期望的结果。你的意思是你想在Vield2中有5个VAR1行,在字段2中有5个VAR2行吗?得到一个错误:$RESULT = MyQuiLQuy查询($CON,“从MyTabe选择字段(1))的“选择计数(*)CNT”);中间=中欧(cnt/2);——错误是:未定义变量:cntExample已添加到答案中。尝试了您的示例…未获得错误,但表未更改
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
"
);