2013-05-07 111 views
1

我在我的数据库中有几个具有相似列名的表。PDO:fetchAll()在JOIN上有重复的列名

让说表1,表2,表3有一个名为:“名称”的列。这些不是索引列。它们包含不同和独立的数据。

如果我运行一个连接这3个表和fetchAll()结果的查询,由于fetchAll()会覆盖具有相同名称的列,所以在结果数组中只会有一个“名称”条目。

常规MySQL的图书馆让你访问这样的结果做:

mysql_result($结果,0, 'TABLE1.name');

我怎样才能让PDO列名像以前一样追加表名:TABLE1.name,TABLE2.name等

我想在我的SQL查询中使用别名,因为我有吨,以避免表。我在网上找到的唯一答案使用别名。是否有任何参数可以提供给PDO来执行我正在寻找的功能?

+0

据我所知,你将不得不使用'PDO :: FETCH_NUM'和使用的列的FETCH_BOUND'数量,或'和' - > bindColumn()',再次与一些基于指数。 – Wrikken 2013-05-07 19:29:43

+0

Wrikken:关于我如何做到这一点的更多细节? – 2013-05-07 19:35:27

+0

这是在PHP的文档中,虽然'var_dump()' - > fetchAll(PDO :: FETCH_NUM)'的结果'检查它的输出可能会告诉你足够的工作。 – Wrikken 2013-05-07 20:54:26

回答

1

您可以在SELECT语句中使用别名而不是直接列名。事情是这样的:

SELECT 
    table1.name AS t1_name, 
    table2.name AS t2_name, 
    table3.name AS t3_name 
-- rest of your query 
+0

请看我上面的问题:“我想避免在我的SQL查询中使用别名,因为我有大量的表”-.- – 2013-05-07 19:35:00

+0

对不起,没有看到:P您可以使用'PDO :: FETCH_NUM',_returns按照[手册](http://php.net/manual/pt_BR/pdostatement.fetch.php)在结果集中返回的列号索引的数组,从列0_开始。 – vcampitelli 2013-05-07 19:40:11