Cómo insertar datos en la tabla 1 con el campo de verificación de la tabla 2 (Codeigniter) (Actualizado)

Aquí está la estructura de table1 :

  1. id_data_inserted
  2. fecha
  3. id_data
  4. id_room

estructura de table2 :

  1. id_data
  2. data_name
  3. especificación
  4. cantidad
  5. precio

Estoy tratando de insertar datos en la table1 , pero antes de insertar datos en la table1 , necesito verificar los archivos id_data table1 y table2 . Si id_data de la table2 igual a los datos de id_data table1 se insertará en la tabla, y si no, los datos no se insertarán en la tabla.

Por ejemplo:

  • Datos de la tabla2

Datos de la tabla2

  • Captura de pantalla de Simple Form

Captura de pantalla de Simple Form

Ya tengo un formulario simple para ingresar datos a la base de datos. en table2 hay datos que tienen id_data = AA001 , y si insertamos datos en table1 con un valor de id_data del formulario simple (si insertamos AA001 en el formulario), se insertará, pero cuando ingresamos id_data que son no AA001 fallará. (no insertado en la base de datos).

Y ahora, ¿qué debería hacer?

EDITAR

Este es mi modelo:

 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; } } 

Y esta es la función input_data_inserted en mi controlador:

 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!"; } } 

Estoy intentando este código, pero si inserto id_data = AA001 en el formulario, la ejecución siempre irá a la instrucción else. Pero si cambio el valor de $ checkID_Data con una cadena (ahora así: $ checkID_Data = “AA001”) la ejecución irá a la instrucción if y los datos se insertarán correctamente.

¿Alguna solución?

Puede escribir una instrucción de selección de inserción.

Esto es solo una visualización aproximada ya que no ha proporcionado su código. Avísame si necesitas una aclaración.

 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 

Responda su actualización:

Aquí está mi respuesta actualizada para su controlador. Pero aún prefiero mi primera respuesta porque es mucho más rápido.

 $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!"; }