Может ли кто-нибудь сказать мне, как присоединиться к 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 таблицы.
это должно быть так,
$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
Я считаю, что с использованием активной структуры записи 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();
Попробуйте и посмотрите, как это происходит.
Я создал функцию для получения массива со значениями полей и объединения. Это относится к модели:
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;
Я думаю, что в CodeIgniter лучше использовать ActiveRecord, как написано выше. Еще одна вещь: вы можете использовать цепочку методов в AR:
$this->db->select('*')->from('table1')->join('table2','table1.id=table2.id')->...
Для выполнения чистых операторов SQL (я не знаю о FRAMEWORK-CodeIGNITER !!!) вы можете использовать SUB QUERY! Синтаксис будет следующим:
SELECT t1.id FROM example t1 INNER JOIN (выберите id из (example2 t1
join example3 t2
on t1
. id
= t2
. id
)) как t2 ON t1.id = t2.id;
Надеюсь, ты получишь мою точку!
вы можете модифицировать свою кодировку следующим образом:
$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
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'); }
$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();
Где вы можете указать, какой идентификатор следует просмотреть или выбрать в определенной таблице. Вы также можете выбрать, какую часть соединения оставить левой, правой, внешней, внутренней, левой и правой внешними по третьему параметру метода соединения.