我有一个表T1,有两个外键针对同一个表T2。
所以,我的SQL语句是这样的:SELECT *
FROM T1
INNER JOIN T2 AAA ON AAA.ID = T1.ID1
INNER JOIN T2 BBB ON BBB.ID = T1.ID2
(this SQL works)
然后,我使用$info = $exec->fetch(PDO::FETCH_ASSOC);
我想,最后,使用$ info->AAA.name
和$info->BBB.name
,但是我不知道如何在阅读中设置表名。和我我喜欢避免通过添加一打…来改变我的SQL。为…
任何想法?
UPDATE1
我搜索了PDO文件,发现了指令PDO::ATTR_FETCH_TABLE_NAMES
。文档说它使驱动程序在列名之前返回表名。表名和列名之间用'.'(点)分隔。
你可以尝试使用这个指令来解决你的问题,但也许没有别名它将无法工作。
请试穿:$PDO->setAttribute(PDO::ATTR_FETCH_TABLE_NAMES, true);
更新2
我从提问者那里发现了以下问题和答案,他们使用这个指令来解决他的问题,类似于年轻人。SELECT包含列
这个问题重复了之前问过的其他几个问题:
PDO: fetchAll()在JOIN上使用重复的列名
PDO获取时自动混叠?
解决方案是使用PDO::FETCH_NUM
,它将返回一个已获取列的编号数组。但我不建议这样做,因为如果你要改变你的表的结构,你的PHP脚本可能会被破坏。
无论如何,它仍然是一个好的做法选择某些列和设置别名而不是所有的*
。这样的:
SELECT T1.ID1 as ID1, T1.ID2 as ID2, T1.name as T1_name, AAA.name as AAA_name, BBB.ID as BBB_name
FROM
T1
INNER JOIN
T2 AAA
ON AAA.ID = T1.ID1
INNER JOIN
T2 BBB
ON BBB.ID = T1.ID2