Как INNER СОЕДИНИТЬ 3 таблицы, используя CodeIgniter - PullRequest
8 голосов
/ 16 сентября 2011

Может кто-нибудь подсказать, как объединить 3 таблицы с php? Пример

SELECT FROM table1, table2,table on INNERJOIN -------------------

позвольте мне иметь 3 таблицы. (Таблица вопросов, таблица ответов и таблица категорий) Вот пример из моей веб-страницы.

Time remaining 30 minutes(I will get "30 minutes" form Category table)
1. Question (from question table)
2. answer (from answer table)

Я не знаю, как присоединиться к 3 столам.

Ответы [ 9 ]

30 голосов
/ 16 сентября 2011

должно быть так,

$this->db->select('*');    
$this->db->from('table1');
$this->db->join('table2', 'table1.id = table2.id');
$this->db->join('table3', 'table1.id = table3.id');
$query = $this->db->get();

в соответствии с активной структурой записи CodeIgniters

4 голосов
/ 16 сентября 2011

Я полагаю, что при использовании активной структуры записей CodeIgniters вы просто используете два оператора соединения один за другим.
Например:

$this->db->select('*');
$this->db->from('table1');
$this->db->join('table1', 'table1.id = table2.id');
$this->db->join('table1', 'table1.id = table3.id');
$query = $this->db->get();

Попробуйте и посмотрите, как это происходит.

2 голосов
/ 27 октября 2011

Я создал функцию для получения массива со значениями для полей и объединения. Это идет в модели:

  public function GetDataWhereExtenseJoin($table,$fields,$data) {
    //pega os campos passados para o select
    foreach($fields as $coll => $value){
        $this->db->select($value);
    }
    //pega a tabela
    $this->db->from($table);
    //pega os campos do join
    foreach($data as $coll => $value){
        $this->db->join($coll, $value);
    }
    //obtem os valores
    $query = $this->db->get();
    //retorna o resultado
    return $query->result();

}

Это идет в контроллере:

$data_field = array(
        'NameProduct' => 'product.IdProduct',
        'IdProduct' => 'product.NameProduct',
        'NameCategory' => 'category.NameCategory',
        'IdCategory' => 'category.IdCategory'
        );
    $data_join = array
                    ( 'product' => 'product_category.IdProduct = product.IdProduct',
                      'category' => 'product_category.IdCategory = category.IdCategory',
                      'product' => 'product_category.IdProduct = product.IdProduct'
                    );
    $product_category = $this->mmain->GetDataWhereExtenseJoin('product_category', $data_field, $data_join);

результат:

echo '<pre>';
    print_r($product_category);
    die;
2 голосов
/ 16 сентября 2011

Я думаю, в CodeIgniter лучше всего использовать ActiveRecord, как написано выше Еще одна вещь: вы можете использовать метод цепочки в AR:

$this->db->select('*')->from('table1')->join('table2','table1.id=table2.id')->...
1 голос
/ 03 мая 2017

Вы можете изменить кодировку следующим образом

 $this->db->select('a.nik,b.nama,a.inv,c.cekin,c.cekout,a.tunai,a.nontunai,a.id');
 $this->db->select('DATEDIFF (c.cekout, c.cekin) as lama');
 $this->db->select('(DATEDIFF (c.cekout, c.cekin)*c.total) as tagihan');
 $this->db->from('bayar as a');
 $this->db->join('pelanggan as b', 'a.nik = b.nik');
 $this->db->join('pesankamar_h as c', 'a.inv = c.id');
 $this->db->where('a.user_id',$id);
 $query = $this->db->get();
 return $query->result();

Я надеюсь, можно решить ваш SQL

1 голос
/ 16 сентября 2011

Для выполнения операторов чистого SQL (я не знаю о FRAMEWORK-CodeIGNITER !!!) Вы можете использовать SUB QUERY! Синтаксис будет следующим:

ВЫБРАТЬ t1.id ОТ примера t1 INNER JOIN (выберите id из (example2 t1 присоединиться к example3 t2 on t1. id = t2. id)) как t2 ON t1.id = t2.id;

Надеюсь, вы получите мою точку зрения!

0 голосов
/ 21 июня 2018
$this->db->select('*');    
$this->db->from('table1');
$this->db->join('table2', 'table1.id = table2.id','JOIN Type');
$this->db->join('table3', 'table1.id = table3.id');
$query = $this->db->get();

это даст вам результат из таблиц1, таблиц2, таблиц3, и вы можете использовать любой тип объединения в третьей переменной функции $ this-> db-> join (), такой как inner, left,правильно и т. д.

0 голосов
/ 17 февраля 2016
$this->db->select('*');    
$this->db->from('table1');
$this->db->join('table2', 'table1.id = table2.id', 'inner');
$this->db->join('table3', 'table1.id = table3.id', 'inner');
$this->db->where("table1", $id );
$query = $this->db->get();

Где вы можете указать, какой идентификатор следует просматривать или выбрать в конкретной таблице. Вы также можете выбрать, какая часть соединения является левой, правой, внешней, внутренней, левой внешней и правой внешней в третьем параметре метода соединения.

0 голосов
/ 08 июня 2013
function fetch_comments($ticket_id){
    $this->db->select('tbl_tickets_replies.comments, 
           tbl_users.username,tbl_roles.role_name');
    $this->db->where('tbl_tickets_replies.ticket_id',$ticket_id);
    $this->db->join('tbl_users','tbl_users.id = tbl_tickets_replies.user_id');
    $this->db->join('tbl_roles','tbl_roles.role_id=tbl_tickets_replies.role_id');
    return $this->db->get('tbl_tickets_replies');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...