【问题标题】:Increment a column in MySQL在 MySQL 中增加一列
【发布时间】:2011-03-23 04:13:38
【问题描述】:

Zend 中有没有一种方法可以将 MySQL 列中保存的整数加 1?

谢谢

编辑:

我目前的代码是这样的:

$row = $this->find($imageId)->current();
$row->votes = // THIS IS WHERE I WANT TO SAY INCREMENT
$row->save();

【问题讨论】:

  • 是的 - 在您提供更多详细信息之后
  • 你是说 Zend 框架吗?如果是,是哪个组件? Zend_Db、Zend_Db_Table 还是别的什么?

标签: mysql zend-framework increment zend-db-table


【解决方案1】:

是的,有。这是一个使用产品并增加数量字段的示例:

$table     = 'products'; 
$data      = array('prd_qnty' => new Zend_Db_Expr('prd_qnty + 1')); 
$where[] = $db->quoteInto('pr_id = ?', $this->pr_id); 
$db->update($table, $data, $where);

【讨论】:

  • 是对我的旧答案还是新答案投了反对票?我很确定新的是正确的,不是吗?
  • 是的,$row->votes++; 将是要走的路。将来它有助于在您的问题中显示相关代码,以便我们可以指导您找到最佳解决方案。
【解决方案2】:

votes++ 不能防止来自其他请求的竞争条件,这就是为什么需要一个数据库解决方案。

例如:假设两个请求几乎同时进入

1st request loads object - votes is 500
2nd request loads object - votes is 500
1st increments value in memory - votes is 501
2nd increments value in memory - votes is 501
1st saves to db - votes is 501
2nd saves to db - votes is 501 (should be 502)

【讨论】:

    【解决方案3】:

    我可以提供以下建议吗

    $row->votes++;
    

    【讨论】:

    • 一个非常简单的解决方案。谢谢。
    • 这会受到连接之间竞争条件的影响,是一个糟糕的解决方案。
    猜你喜欢
    • 1970-01-01
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-30
    • 2011-01-23
    相关资源
    最近更新 更多