Как вставить данные в таблицу1 с полем проверки из таблицы2 (Codeigniter) (обновлено)

Вот table1 :

  1. id_data_inserted
  2. Дата
  3. id_data
  4. id_room

table2 2:

  1. id_data
  2. имя_данных
  3. Спецификация
  4. количество
  5. цена

Я пытаюсь вставить данные в table1 , но перед тем, как вставлять данные в table1 , мне нужно проверить таблицу id_data1 и table2 . Если id_data из таблицы2 с данными id_data table1 будет вставлен в таблицу, а если нет, данные не будут вставлены в таблицу.

Например:

  • Данные из таблицы2

Данные из таблицы2

  • Скриншот простой формы

Скриншот простой формы

У меня уже есть простая форма для ввода данных в базу данных. в table2 есть данные, которые имеют id_data = AA001 , и если мы id_data = AA001 данные в table1 со значением id_data из простой формы (если мы вставим AA001 в форму), она будет вставлена, но когда мы будем вводить id_data, которые являются а не AA001, он потерпит неудачу. (не вставлен в базу данных).

А теперь что мне делать?

РЕДАКТИРОВАТЬ

Это моя модель:

 <?php class My_Model extends CI_Model { public function __construct() { parent::__construct(); } public function input_data($data, $table) { $this->db->insert($table,$data); } public function view_data($table) { return $this->db->get($table); } public function checkIdData() { $query = $this->db->query("SELECT id_data FROM table2"); return $query; } } 

И это функция input_data_inserted в моем контроллере:

 public function input_data_inserted() { $id_data_inserted = $this->input->post('id_data_inserted'); $date = $this->input->post('date'); $id_data = $this->input->post('id_data'); $id_room = $this->input->post('id_room'); $checkID_Data = $this->my_model->checkIdData()->result_array(); if($id_data == $checkID_Data) { $data = array ( 'id_data_inserted' => $id_data_inserted, 'date' => $date, 'id_data' => $id_data, 'id_room' => $id_room ); $this->my_model->input_data($data, 'table1'); $data['table1'] = $this->my_model->viewl_data('table1')->result(); $this->load->view('admin/data/v_data', $data); } else { echo "Failed to input!"; } } 

Я пытаюсь использовать этот код, но если я вставляю id_data = AA001 в форму, выполнение всегда переходит к инструкции else. Но если я изменяю значение $ checkID_Data со строкой (теперь вот так: $ checkID_Data = "AA001"), выполнение переходит к оператору if, и данные успешно вставляются.

Любое решение?

Вы можете написать инструкцию выбора вставки.

Это просто грубая визуализация, так как вы не предоставили свой код. Дайте мне знать, если вам нужно разъяснение.

 INSERT INTO table1 (id_data_inserted, date, id_data, id_room) SELECT '$id_data_inserted' as id_data_inserted, '$date' as date, '$id_data' as id_data, '$id_room' as id_room FROM table2 WHERE id_data = $id_data 

Ответьте на свое обновление:

Вот мой обновленный ответ для вашего контроллера. Но я по-прежнему предпочитаю свой первый ответ, потому что это намного быстрее.

 $checkID_Data = $this->my_model->checkIdData()->result_array(); $passed = FALSE; foreach ($checkID_Data as $v) { if($id_data == $v['id_data ']) { $data = array ( 'id_data_inserted' => $v['id_data'], 'date' => $date, 'id_data' => $id_data, 'id_room' => $id_room ); $this->my_model->input_data($data, 'table1'); $data['table1'] = $this->my_model->viewl_data('table1')->result(); $this->load->view('admin/data/v_data', $data); $passed = TRUE; break; } } if (!$passed) { echo "Failed to input!"; }