mysql> CREATE TABLE reservation (
-> id INT,
-> data VARCHAR(50)
-> );
Query OK, 0 rows affected (0.42 sec)
mysql> CREATE TABLE booking (
-> id INT,
-> data VARCHAR(50)
-> );
Query OK, 0 rows affected (0.06 sec)
mysql> CREATE TABLE billing (
-> id INT,
-> data VARCHAR(50)
-> );
Query OK, 0 rows affected (0.05 sec)
mysql> INSERT INTO reservation (id, data) VALUES (1, 'Lorem ipsum'), (2, 'Dolor sit amet');
Query OK, 2 rows affected (0.05 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> INSERT INTO booking (id, data) VALUES (1, 'Consectetur adipisicing'), (2, 'Consectetur adipisicing');
Query OK, 2 rows affected (0.03 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> INSERT INTO billing (id, data) VALUES (1, 'Tempor incididunt'), (2, 'Ut labore');
Query OK, 2 rows affected (0.02 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql>
mysql> SELECT *
-> FROM reservation
-> LEFT JOIN booking ON reservation.id=booking.id
-> LEFT JOIN billing ON booking.id=billing.id;
+------+----------------+------+-------------------------+------+-------------------+
| id | data | id | data | id | data |
+------+----------------+------+-------------------------+------+-------------------+
| 1 | Lorem ipsum | 1 | Consectetur adipisicing | 1 | Tempor incididunt |
| 2 | Dolor sit amet | 2 | Consectetur adipisicing | 2 | Ut labore |
+------+----------------+------+-------------------------+------+-------------------+
2 rows in set (0.00 sec)
Обновление
ОП теперь спрашивает, как это сделать в PHP-среде CodeIgniter, которую я никогда не использовал. Все, что я могу предоставить, это общий совет по PHP. Большинство библиотек БД предоставляют методы для извлечения результатов запроса как числовых массивов, так и ассоциативных массивов. Если есть повторяющиеся имена столбцов, вы должны избегать второго и придерживаться числовых массивов. Например, вместо этого:
while($row = $res->fetch(PDO::FETCH_ASSOC)){
}
... вы должны сделать это:
while($row = $res->fetch(PDO::FETCH_NUM)){
}