使用mysql查询为现有值添加值

时间:2018-01-30 18:35:25

标签: php mysql codeigniter

大家好我正在使用codeigniter。我有一个产品列表,其中列数量为#q;'。现在我需要在数量上已经存在的值中添加新值。

在:

+----+-------------+  
| id | qty         |  
+----+-------------+  
|  1 | 5           |  
|  2 | 12          |  
|  3 | 50          |  
|  4 | 35          |  
+----+-------------+ 

我在帮助程序中尝试过此查询(我在查询之前已经检查过$qty$productID的值):

$qty = 20;
$productID = 1;
$query = $ci->db->query('UPDATE products SET qty  = qty + ' . $qty . ' WHERE id = "' . $productID . '"');

在此查询之后,它始终将值更新为0,而不是添加到上一个示例中。 查询返回true但始终将0添加到db。这是为什么 ? 我见过许多使用相同查询的例子,但它并没有发生在我身上。我该如何解决这个问题?

3 个答案:

答案 0 :(得分:0)

试试这个:

private function getQty($productId)
         {
             $db = $this->db;
             $db->select('qty')->from('products')->where('id', $productId);
             $result = $db->get()->row();
             if ($result)
             {
                 return $result;
             }
             else
             {
                 return false;
             }
         }

         public function update($productId, $newQty)
         {
             $db = $this->db;
             $oldQty = $this->getQty($productId);
             $qty = $oldQty + $newQty;
             $data['qty'] = $qty;



             $db->where('id', $productId)->update('products', $data);

             if ($db->affected_rows())
             {
                 return true;
             }
             else
             {
                 return false;
             }
         }

答案 1 :(得分:0)

这是codeigniter方式:

  

第三个参数是FALSE意味着你告诉你不要逃避文本

$this->db->set('qty', 'qty + ' .  $qty, FALSE)
         ->where('id', $productID )
         ->update('products'); 

答案 2 :(得分:0)

尝试这样做:

$this->db->where('id', $productID);
$this->db->set('qty', 'qty + ' . $qty, FALSE);
$this->db->update('products');

FALSE 会给出:

UPDATE products SET qty = qty + 5 WHERE id = '1'

而不是:

UPDATE products SET qty = 'qty + 5' WHERE id = '1'

更多详情here