具有增量值的Mysql更新

时间:2016-07-19 01:43:22

标签: php mysql sql-update

我想在一个请求中进行更新(如果可能的话)以减少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 );';

或者我不知道如何让它发挥作用..

3 个答案:

答案 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

或者我是否误解了您的要求?