#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();
}