Несколько соединений в Codeigniter - PullRequest
10 голосов
/ 07 февраля 2011

Я новичок в построении баз данных, и я пытаюсь сделать JOIN на основе наличия трех таблиц базы данных.

Table A = ID, Name, etc
Table B = ID, Name, etc
Table C = ID, TableAId, TableBId

Что я не могу понять, так это использовать активную запись, как сделать этот выбор. Я пытаюсь сделать как можно меньше запросов, но получаю тупик от того, как все это должно быть написано без трех отдельных вызовов.

Ответы [ 4 ]

32 голосов
/ 07 февраля 2011
$this->db->select('*');
$this->db->from('TableA AS A');// I use aliasing make joins easier
$this->db->join('TableC AS C', 'A.ID = C.TableAId', 'INNER');
$this->db->join('TableB AS B', 'B.ID = C.TableBId', 'INNER');
$result = $this->db->get();

Функция соединения работает так: объединение ('TableName', 'ON условие', 'Тип объединения');

Эквивалентный sql:

SELECT *
FROM TableA AS A
    INNER JOIN TableC AS C
    ON C.TableAId = A.ID
    INNER JOIN TableB AS B
    ON B.ID = C.ID

Я обнаружил, что сначала написание SQL-кода, его тестирование, а затем преобразование в стиль активной записи сводит к минимуму ошибку.

5 голосов
/ 07 февраля 2011
$this->db->select('*');
$this->db->from('blogs');
$this->db->join('comments', 'comments.id = blogs.id');
$this->db->join('authors', 'authors.id = comments.author_id');

надеюсь, вы получите мой пример.

Просто добавьте еще $this->db->join();

Для сложных запросов вам, возможно, лучше взглянуть на ORM, например doctrine

1 голос
/ 04 августа 2016
$this->db->select('*');

$this->db->from('table1');

$this->db->join('table2','table1.id=table2.id'); 

$this->db->join('table3','table2.id=table3.id');

$this->db->join('table4','table3.id=table4.id'); 

$this->db->join('table5','table5.id=table4.id');

$this->db->where('table5.id',$this->session->userdata('id'));//getting value from session and match the id of table5 and then show data

$data=$this->db->get()->result();//all data store in $data variable
0 голосов
/ 07 февраля 2011

если вы хотите гибкий запрос, вы можете использовать:

http://codeigniter.com/user_guide/database/results.html

, который использует следующий синтаксис $query = $this->db->query('SELECT * FROM my_table');

вот запрос:

SELECT a.name as namea ,b.name as nameb FROM tablec c
JOIN tablea a ON a.ID = c.ID
JOIN tableb b ON b.ID = c.ID

вы можете узнать больше о соединениях здесь

, а затем просмотреть свои результаты следующим образом:

$query = $this->db->query("YOUR QUERY");

foreach ($query->result_array() as $row)
{
   echo $row['namea'];
   echo $row['nameb'];
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...