我的数据库中有 reservation、booking、billing 三个表。我正在使用连接查询。
我在这 3 个表中有五个以上的公共(public)字段。在执行查询时,公共(public)字段被覆盖。
有没有办法在不覆盖的情况下从 3 个表中获取每个值,也不为这些公共(public)字段提供别名?
[更新:根据最近的评论,OP 正在询问如何使用 CodeIgniter 获取此类列]
最佳答案
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)
更新
OP 现在询问如何在我从未使用过的 CodeIgniter PHP 框架中执行此操作。我所能提供的只是一般的 PHP 建议。大多数数据库库都提供了将查询结果作为数值数组和关联数组获取的方法。如果有重复的列名,则必须避免使用第二个列名并坚持使用数值数组。例如,而不是这个:
while($row = $res->fetch(PDO::FETCH_ASSOC)){
}
...你必须这样做:
while($row = $res->fetch(PDO::FETCH_NUM)){
}
关于php - 在 mysql 中是否还有其他解决此问题的可能性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5258106/