2014-02-10 109 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