2017-04-08 13 views
0

JSONフィールドに「spec」というJSONフィールドがあり、これにJSONフォーマットで約10個のアイテムがあります。私は量を更新する必要があります。データベース内の1つのJSONフィールドを更新する - CodeIgniter

私はこのメソッドを試してみると、それ以外のものはすべて削除してspec = quantityと設定します。

これまでのところ、

$pass_coupon_id = $this->pass_coupon_id(); 

$coupon_array = $this->db->query("SELECT * FROM coupon WHERE coupon_id='$pass_coupon_id'")->result_array(); 

     foreach ($coupon_array as $row) { 
      $spec = json_decode($row['spec'], true); 
      } 

      $quantity_new = $spec['quantity'] - 1; 
      $data2 = array(
      'spec' => json_encode(array(
          'quantity'=> $quantity_new 
         ))); 

     $this->db->where('coupon_id', $pass_coupon_id); 
     $this->db->update('coupon', $data2); 
+1

あなたは配列にそれを書き戻すされていない、あなたは基本的に、それを上書きしています。 –

+0

select SQLの代わりにSQLを更新できます –

答えて

0

この1つのフィールドのみを上書きして、クエリ全体フィールドを更新する必要があります。データベースによっては、最善の解決策は、全体の構造を更新OMMITする特定の機能を使用することになり

<?php 
$pass_coupon_id = $this->pass_coupon_id(); 
$coupon_array = $this->db->query("SELECT * FROM coupon WHERE coupon_id='$pass_coupon_id'")->result_array(); 
// i don't know what you're using, but using foreach to extract single row isn't good solution. Look for sth like result_row() maybe. 

$coupon   = $coupon_array[0]; 
$spec    = json_decode($coupon, true); 
$new_quantity  = $spec['quantity'] - 1; 
$spec['quantity'] = $new_quantity; 
$new_spec   = json_encode($spec); 

$this->db->where('coupon_id', $pass_coupon_id); 
$this->db->update('coupon', $new_spec); 

- https://stackoverflow.com/a/34987329/2926214

関連する問題