我想在一个请求中进行更新(如果可能的话)以减少mysql请求。
我的桌子上有不同的列和一列"顺序"我希望更改" order"中的值
我可以在PHP中创建循环foreach,但每个循环都是这样的请求:
$i = 1;
foreach($tables as $table){
$sql = 'UPDATE `table` SET `order` = '$i' WHERE `id` ='.$table['id'].';';
$i++;
}
是否可以只提出一个请求?
我已经找到了这个,但它不起作用
SET @pos := 0;
$sql ='UPDATE table SET order = ( SELECT @pos := @pos + 1 );';
或者我不知道如何让它发挥作用..
答案 0 :(得分:1)
这种方法可以通过单个查询解决您的问题,但如果我们有更多记录则会很乏味
让我们有一个名为order_details的表
char* hashme = "hallo123";
int result=0;
for(int i = 0; i<8; ++i) {
result += hashme[i];
}
现在更新单个查询中的多行
CREATE TABLE `order_details` (
`order_id` int(11) NOT NULL,
`order_description` varchar(45) DEFAULT NULL,
`order_value` int(11) DEFAULT NULL,
PRIMARY KEY (`order_id`)
)
Select * from order_details
order_id order_description order_value
1 a 11
2 b 12
3 c 13
您可以通过执行选择查询来验证它
UPDATE test.order_details
SET order_value = CASE order_id
WHEN 1 THEN 21
WHEN 2 THEN 22
WHEN 3 THEN 23
END WHERE order_id IN (1,2,3)
答案 1 :(得分:1)
(代表OP发布)。
我知道直接使用MySQL查询是不可能的。所以我将逐个更新每一行。
答案 2 :(得分:0)
为什么不将所有sql语句组合成1个长字符串,方法是在每个字符串之间保留分号(;)然后立即发送所有内容
didUpdateLocations
或者我是否误解了您的要求?