我在我的数据库中有三个表,如预订,预订,结算。我正在使用连接查询。
我在这3张表中有五个以上的常用字段。在执行查询时,公共字段会被覆盖。
有没有办法从3表中获取每个值而不覆盖,也没有为这些公共字段提供别名?
[更新:根据最近的评论,OP正在询问如何使用CodeIgniter获取此类列表]
答案 0 :(得分:2)
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建议。大多数DB库提供了将查询结果作为数值数组和关联数组获取的方法。如果存在重复的列名称,则必须避免使用第二个列名称并坚持使用数字数组。例如,而不是:
while($row = $res->fetch(PDO::FETCH_ASSOC)){
}
......你必须这样做:
while($row = $res->fetch(PDO::FETCH_NUM)){
}
答案 1 :(得分:0)
为每个表创建视图,为每个重复的命名字段提供新的唯一名称。
好的,所以这仍然在理论上使用别名方法,但您只需要执行一次,然后使用视图中的新字段名称。现有的查询仍将适用于现有的字段名称。
答案 2 :(得分:0)
我不是百分百肯定,但我认为在这种情况下你需要使用别名。
但是你真的需要三次选择同一列吗?你不能只从一列中选择数据。然后,当您想要更新时,您会进行三次更新吗?
编辑:我读过“公共字段”,就像在多个表中复制相同的数据一样,也许你只是认为列名是相同的?