Как получить доступ к данным, которых нет в другой таблице CodeIgniter

#php #mysql #codeigniter

#php #mysql #codeigniter

Вопрос:

Я хочу извлечь данные из одного столбца таблицы, который связан с методом использования другой таблицы foreach в CI, поэтому здесь слева находится таблица crew, а справа — таблица contrib (разделенная символом ‘/’):

  ==== ====== === ==== ========= 
| id | name | / | id | crew_id |
 ==== ====== === ==== ========= 
|  1 | John | / |  1 |       1 |
 ---- ------ --- ---- --------- 
|  2 | Jane | / |  2 |       1 |
 ---- ------ --- ---- --------- 
|  3 | Jody | / |  3 |       2 |
 ---- ------ --- ---- --------- 
 

В модели taskmodel я пробовал:

 public function list_contrib(){
    $this->db->select('contrib.*, crew.name');
    $this->db->from('contrib');
    $this->db->join('crew', 'contrib.crew_id = crew.id' 'inner);
    $query = $this->db->get();
    return $query->result();
}

public function crew_list(){
    $this->db->select('*');
    $this->db->from('crew');
    $query = $this->db->get();
    return $query->result();
}
 

На контроллере:

  public function add_task(){

    $this->load->model('taskmodel');

    $data['crews']   = $this->taskmodel->crew_list();
    $data['contrib'] = $this->taskmodel->list_contrib();

    $this->load->view('add_task', $data);
}
 

В представлении:

 <?php foreach($contrib as $cont): ?>
    <select>
    <?php foreach($crews as $crew):
          if($crew->id != $cont->crew_id ) { ?>
      <option value="<?php $crew->id ?>"><?php echo $crew->name ?></option>
    <?php } endforeach; ?>
    </select>             
<?php endforeach; ?>
 

Он продолжает включать Джейн в мой вариант выбора. Я ожидаю, что только Jody, который отображается в моей опции выбора, потому что идентификаторы Джона и Джейн существуют в таблице contrib. Извините за плохой английский. Есть идеи?

Комментарии:

1. blog.codinghorror.com/a-visual-explanation-of-sql-joins

2. поделитесь ожидаемым результатом

3. Я ожидаю, что только Джоди , который отображается в моем выборе, потому что идентификатор Джона и Джейн существует в contrib таблице crew_id .

Ответ №1:

Потому что вы используете внутреннее соединение. Попробуйте использовать соединение влево или вправо

 public function list_contrib(){
    $this->db->select('contrib.*, crew.name');
    $this->db->from('contrib');
    $this->db->join('crew', 'contrib.crew_id = crew.id', 'left');
    $query = $this->db->get();
    return $query->result();
}