Соединить две таблицы в codeigniter - PullRequest
0 голосов
/ 21 ноября 2011

Я пытаюсь объединить два стола.Скажем, t1 и t2.t1 имеет fk t2_id.но когда я запускаю код, на моем экране ничего не отображается.

Контроллер:

 //..
 $data['city']= $this->state_model->name();
 $this->load->view('viewt', $data);

Модель:

    function name(){
    $this->db->select('*');
    $this->db->from('state');
    $this->db->join('city', 'city.state_id = state.id');
    $sql = $this->db->get();

    if ($sql->num_rows () >0) {
        foreach($sql->result() as $row) {
        $this->db->where('state_id','state.id');
        $r = $this->db->get('city');
        }

    return $r->result();

     }
     else {
     return null;   
            }

Просмотр:

 <?php foreach($city as $row):?>
  <?php echo $row->cityname; ?></br></br></br>
  <?php endforeach;?></br></br>

Заранее спасибо

Запросы:

  SELECT `id`, `statename`
  FROM (`state`)
  ORDER BY `id` ASC

  SELECT *
FROM (`state`)
JOIN `city` ON `city`.`state_id` = `state`.`id`  

  SELECT *
  FROM (`city`)
  WHERE `state_id` = 'state.id'  

  SELECT *
  FROM (`city`)
  WHERE `state_id` = 'state.id'  

  SELECT *
  FROM (`city`)
  WHERE `state_id` = 'state.id'  

Ответы [ 4 ]

1 голос
/ 21 ноября 2011

Ваша переменная $ r будет иметь только последнюю итерацию, поэтому функция будет возвращать только последний набор результатов, поэтому попробуйте следующее:

if ($sql->num_rows () >0) {
    foreach($sql->result() as $row) {
    $this->db->where('state_id',$row->state_id);
    $r[] = $this->db->get('city')->row();
    }

return $r;
0 голосов
/ 21 ноября 2011

Я не совсем понимаю, зачем вам второй запрос внутри цикла.Разве вы не можете просто сделать:

if ($sql->num_rows() > 0) {
    return $sql->result();
}

?

0 голосов
/ 21 ноября 2011

Хорошо, значит, вы получили три записи от вашего объединения - мы знаем, что это работает. Но остальные 3 запроса выглядят некорректно. Попробуйте это:

if ($sql->num_rows () >0) {
    $r = array();
    foreach($sql->result() as $row) {

        // here, you need to replace 'state.id' with the actual
        // results from your join query ($row->id which is the id
        // from the state table
        $this->db->where('state_id',$row->id);
        $r[] = $this->db->get('city')->result();
    }
    return $r;
 }
 else 
 {
     return null;   
 }

Итак, теперь у вас должен быть массив результатов, и вы можете выполнять итерацию с foreach в своем представлении.

0 голосов
/ 21 ноября 2011

Проверьте последний запрос: $this->db->last_query().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...