Вставка Codeigniter, если не существует, и обновлять, если нет

У меня есть две таблицы для этой категории продуктов, где я храню категории продуктов, а другой – это список продуктов, в которые я вставляю продукты, когда вы вставляете новый продукт, там будет выпадающий список, который можно выбрать из категорий, хранящихся в категории продукта, но если вы хотите добавить другую категорию, в раскрывающемся списке есть «другая» опция, и появится текстовое поле, и вы можете создать другую категорию, потому что я добавляю новый продукт с существующей категорией в базу данных, которую он не вставляет в две таблицы но если я добавлю новый продукт с новой категорией, он успешно добавит мой контроллер:

function do_upload() { $config['upload_path'] = './assets/'; $config['allowed_types'] = 'gif|jpg|png'; $config['max_size'] = '2000'; $config['max_width'] = '2000'; $config['max_height'] = '2000'; $config['new_image'] = './assets/'; $config['overwrite'] = TRUE; $this->load->library('upload', $config); $this->form_validation->set_rules('name', 'Product Name', 'required|xss_clean'); $this->form_validation->set_rules('description', 'Product Description', 'required|xss_clean'); $this->form_validation->set_rules('price', 'Price', 'required'); if (!$this->upload->do_upload() || !$this->form_validation->run()) { $error = array('error' => $this->upload->display_errors()); redirect('add_products'); } else { $data = $this->upload->data(); $this->thumb($data); $category = $_POST["prod_category"]; if($category == "2") { $category = $_POST["other_category"]; } $file = array( 'img_name' => $data['raw_name'], 'thumb_name' => $data['raw_name'] . '_thumb', 'ext' => $data['file_ext'], 'product_name' => $this->input->post('name'), 'product_description' => $this->input->post('description'), 'product_price' => $this->input->post('price'), 'product_category' =>$category, ); $this->db->insert("product_category",array("category"=>$category)); $this->User->insert_prod($file); $data = array('upload_data' => $this->upload->data()); echo '<script>alert("You Have Successfully Added a new Product!");</script>'; redirect('admin_products','refresh'); } } 

модель

 public function insert_prod($file){ $this->db->insert('product_table',$file); } 

Сначала вам нужно проверить, выходит ли пользователь или данные или нет. то вы можете выполнить операцию обновления и вставки.

  $this->db->where('user_id',$id); $q = $this->db->get('profile'); if ( $q->num_rows() > 0 ) { $this->db->where('user_id',$id); $this->db->update('profile',$data); } else { $this->db->set('user_id', $id); $this->db->insert('profile',$data); } 

Существует еще один способ с помощью запроса mysql

  $query = 'INSERT INTO table_name (id, name) VALUES (?, ?) ON DUPLICATE KEY UPDATE name=VALUES(name)'; 

Объяснение Предположим, что это таблица.

 +----+----------+ | id | name | +----+----------+ | 1 | Urfusion | | 2 | Christian| +----+----------+ 

теперь мы выполняем ON DUPLICATE KEY UPDATE

 INSERT INTO table_name VALUES (3,'Example') ON DUPLICATE KEY UPDATE name='Example'; 

результат

 +----+----------+ | id | name | +----+----------+ | 1 | Urfusion | | 2 | Christian| | 3 | Example | +----+----------+ 

Example был вставлен в таблицу, потому что там нет записи с id ключа, если мы пытаемся вставить данные в позицию 1 или 2, тогда

 INSERT INTO table_name VALUES (1,'Name_changed') ON DUPLICATE KEY UPDATE name='Name_changed'; 

Тогда результат

 | id | name | +----+-------------+ | 1 | Name_changed| | 2 | Christian | | 3 | Example | +----+-------------+ 

Для получения дополнительной информации