如何使用table2中的检查字段向表1插入数据(Codeigniter)

时间:2017-09-07 15:39:35

标签: php mysql database codeigniter

以下是table1的结构:

  1. id_data_inserted
  2. 日期
  3. id_data
  4. id_room
  5. table2的结构:

    1. id_data
    2. DATA_NAME
    3. 规范
    4. 金额
    5. 我尝试将数据插入table1,但在将数据插入table1之前,我需要检查id_data table1table2。如果table2中与id_data table1数据相同的id_data将插入到表中,如果没有,则数据不会插入到表中。

      例如:

      • 来自table2的数据

      Data from table2

      • 简单表单截图

      Simple Form screenshot

      我已经有一个简单的表格来输入数据到数据库。 在table2中,有一个数据有id_data = AA001,如果我们将数据插入table1,其值为id_data,如果我们在表单中插入AA001,那么插入,但当我们输入不是AA001的id_data时,它将失败。 (未插入数据库)。

      现在该怎么办?

      修改

      这是我的模特:

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

      这是我的Controller中的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 =&#34; AA001&#34;)执行将转到if语句并成功插入数据。

      任何解决方案?

1 个答案:

答案 0 :(得分:1)

您可以编写插入选择语句。

由于您尚未提供代码,因此这只是一个粗略的可视化。如果您需要澄清,请告诉我。

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