2012-06-12 78 views
1

我在查詢mysql_fetch_assoc無法訪問同類者列名

$query = mysql_query("SELECT * FROM reservation r, users u ...") 

while($fetch = mysql_fetch_assoc($query)){ 
    if($fetch['u.id'] == $fetch['r.id']) 
    ... 

而且這裏有一個以上的表的問題,我有相同的列名在表上,當我嘗試比較保留的ID用戶的ID我只有用戶的ID!

我可以用列名替換'*',並用AS (SELECT s.id as sid ...)更改它們的名字,但有沒有更簡單的方法? 例如:

+2

請不要在新代碼中使用'mysql_ *'函數。他們不再被維護,社區已經開始[棄用流程](http://goo.gl/KJveJ)。請參閱[**紅框**](http://goo.gl/GPmFd)?相反,您應該瞭解[準備好的語句](http://goo.gl/vn8zQ)並使用[PDO](http://php.net/pdo)或[MySQLi](http://php.net/ mysqli的)。如果你不能決定,[本文](http://goo.gl/3gqF9)將有助於選擇。如果你關心學習,[這裏是很好的PDO教程](http://goo.gl/vFWnC)。 –

回答

2

如果您的兩個表都有一個同名的列,那麼您只能訪問關聯數組中的某個字段 - 關鍵字是字段的名稱,所以第一個被第二個覆蓋。

正如你所說,快速解決方案是明確重命名字段,以便它們不會發生衝突。雖然你可以通過使用mysql_fetch_array來解決它 - 這會給你所有的字段,但你需要通過索引號訪問字段;所以如果你改變表結構,你需要重新編寫代碼。

更好的辦法是不要在不同的表中有兩個同名的字段,如果可能的話 - 如果他們被稱爲reservationIDuserID,你會完全避免這種情況。我儘量不重複使用字段名,除非它是一個外鍵。