2017-11-01 3 views
0

私のモデルでは私のクエリはいくつか問題があります。私はこの編集機能を持っていて、内部は更新されてどこに挿入されるのかを制御するforeachです。問題は、通信テーブルに書き込む最後のelse文のセットです。編集クエリはすべてのレコードに書き込まれています

書かれているレコードは、全体のキャンペーンIDに関連付けられています。そのidは各レコードに格納されます。したがって、各レコードは独自のcommunication_idを持つことができますが、すべて同じcampaign_idを持ちます。

現在、WHEREをcampaign_idに設定すると、すべてのレコードが編集されます。このインスタンスではcommunication_idを使用する必要がありますが、通信クエリの前にどのように取得すればよいですか?レコードにはcommunication_idがあるとします50私はそのidを取得し、それをWHEREで使用したいとします。私はそれをどうやって行うかわからない。

public function editCampaign($campaign_id, $data) { 

     $this->db->query("UPDATE " . DB_PREFIX . "campaigns SET campaign_name = '" . $this->db->escape($data['campaign_name']) . "', campaign_giving_goal = '" . (float)$data['campaign_giving_goal'] 
     . "', code = '" . $this->db->escape($data['code']) . "', campaign_active = '" . $this->db->escape($data['campaign_active']) . "', campaign_giving_count_goal = '" . (float)$data['campaign_giving_count_goal'] . "', campaign_owner = '" . $this->db->escape($data['campaign_owner']). "' 
     , date_beginning = '" . $this->db->escape($data['date_beginning']). "', date_ending = '" . $this->db->escape($data['date_ending']). "' WHERE campaign_id = '" . (int)$campaign_id . "'"); 

     $parent_id = 0; 

     $this->db->query("DELETE FROM " . DB_PREFIX . "campaign_components WHERE campaign_id = '" . (int)$campaign_id . "'"); 
     //$this->db->query("DELETE FROM " . DB_PREFIX . "communication WHERE campaign_id = '" . (int)$campaign_id . "'"); 
     foreach($data['component_module'] as $component_data) { 

      if ($component_data['component_type'] =='EVENT'){ 

      if(isset($component_data['component_parent_id'])){ 
       $parent_id = $component_data['component_parent_id']; 

       $this->db->query("UPDATE " . DB_PREFIX . "product SET model = '" . $this->db->escape($component_data['component_type']) . "', date_starting = '" . $this->db->escape($component_data['component_start_date']). "', date_ending = '" . $this->db->escape($data['date_ending']). "', date_added = NOW() WHERE product_id = '" . (int)$parent_id . "'"); 
       $this->db->query("UPDATE " . DB_PREFIX . "product_description SET name = '" . $this->db->escape($component_data['component_name']) . "', language_id = '1' WHERE product_id ='" . (int)$parent_id . "'"); 
      }else{ 

       $this->db->query("INSERT INTO " . DB_PREFIX . "product SET model = '" . $this->db->escape($component_data['component_type']) . "', date_starting = '" . $this->db->escape($data['date_beginning']). "', date_ending = '" . $this->db->escape($data['date_ending']). "', date_added = NOW()"); 
       $parent_id = $this->db->getLastId(); 

       $this->db->query("INSERT INTO " . DB_PREFIX . "product_description SET name = '" . $this->db->escape($component_data['component_name']) . "', language_id = '1', product_id ='" . (int)$parent_id . "'"); 
       $this->db->query("INSERT INTO " . DB_PREFIX . "product_to_category SET category_id = '82', product_id ='" . (int)$parent_id . "' "); 

      } 

     }else{ 
      $this->db->query("UPDATE " . DB_PREFIX . "communication SET subject = '" . $this->db->escape($component_data['component_name']) . "', channel = '" . $this->db->escape($component_data['component_type']) . "', status = '" . $this->db->escape($component_data['component_status']) . "' 
      , status_date = '" . $this->db->escape($component_data['component_start_date']). "', status = '" . $this->db->escape($component_data['component_status']) . "', created_by = '" . $this->db->escape($component_data['component_owner']) . "', date_added = NOW(), campaign_id = '" . (int)$campaign_id . "'"); 

     } 
      $this->db->query("INSERT INTO " . DB_PREFIX . "campaign_components SET component_name = '" . $this->db->escape($component_data['component_name']) . "', component_type = '" . $this->db->escape($component_data['component_type']) . "', component_status = '" . $this->db->escape($component_data['component_status']) . "' 
      , component_owner = '" . $this->db->escape($component_data['component_owner']). "', component_start_date = '" . $this->db->escape($component_data['component_start_date']). "', campaign_id = '" . (int)$campaign_id . "', parent_id = '" . (int)$parent_id . "'"); 

    } 

     $this->cache->delete('parent_id'); 

     return $campaign_id; 
    } 
+0

してください変数を連結する代わりにステートメントを使用します。 – Barmar

答えて

0

communicationテーブルに参加:準備し使用することを学ぶ

UPDATE campaigns AS ca 
JOIN communication AS co ON ca.communication_id = co.communication_id 
SET ca.col1 = val1, ca.col2 = val2, ... 
WHERE co.campaign_id = $campaign_id 

(クエリの一般的な構造を見ることができるように、私はすべてのPHP変数を残してきた。)

関連する問題