добавить значение к существующему значению, используя запрос mysql

Привет всем, я работаю над codeigniter. У меня есть таблица продуктов со столбцом "количество". Теперь мне нужно добавить новое значение в уже существующее значение в количестве.

До:

+----+-------------+  
| 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. Почему это ? Я видел много примеров, в которых используется один и тот же запрос, но у меня этого не происходит. Как я могу решить эту проблему?


person Bilal Zafar    schedule 30.01.2018    source источник
comment
проверьте здесь: codeigniter.com/userguide3/database/   -  person Vickel    schedule 30.01.2018
comment
@Bilal Можете ли вы изменить строку запроса var_dump? Что произойдет, если вы скопируете его в клиент MySQL? Поведение такое же или другое?   -  person ob-ivan    schedule 30.01.2018
comment
@Vickel Эта ссылка решила мою проблему   -  person Bilal Zafar    schedule 31.01.2018


Ответы (3)


Попробуй это:

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;
             }
         }
person Matheus Ariel    schedule 30.01.2018

Вот способ codeigniter:

3-й аргумент FALSE означает, что вы говорите не избегать текста

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

Попробуйте сделать это:

$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'

Подробнее здесь.

person cusmar    schedule 30.01.2018