2014-02-10 64 views
2

想象一下,我有以下SELECT语句已过分简化。SQL SELECT语句 - 列名相同

SELECT a.Name, b.Name FROM table a LEFT JOIN table b ON a.ID=b.TID 

使用PHP我运行以下命令:

while ($result = mysql_fetch_array($results)) { 

    echo $result["Name"]; 

} 

这会给我的b.Name结果。我知道我可以使用但是,这有时可能会让您有很长的查询并且使用a.*的事情变得复杂。我尝试使用$result["a.Name"],但它不起作用。我知道这工作$result[0]但这并不总是可能的,没有复杂的事情。

请问有什么其他方法可以显示a.Name吗?

+4

简单的回答:第 –

回答

6

简单的回答:没有。

长答案:PHP中的数组索引必须是唯一的。由此,最后一个相似的名称列将获得优先级。

如果结果的两列或多列的字段名相同,则最后一列优先。要访问同名的其他列,您必须使用列的数字索引或为列创建别名。对于别名列,您无法访问具有原始列名称的内容。

source

但是,您可以通过使用别名解决这个问题。

SELECT a.Name as aName, b.Name as bName FROM table a LEFT JOIN table b ON a.ID=b.TID 

,那么你可以通过使用$result["aName"]$result["bName"]

+0

谢谢 - 是的,事实上,我通常使用别名。希望有另一种方式,我需要使用'SELECT *' – malta

2

根据您的要求访问两个表中的姓名,你可以考虑将您的查询在两个fetch语句。这将允许你有重复的列名称。

SELECT a.* FROM table a LEFT JOIN table b ON a.ID=b.TID 

SELECT b.* FROM table b LEFT JOIN table a ON a.ID=b.TID 
+0

这种情况下,但这意味着要从数据库中请求2个电话,我宁愿避免。 – malta