2011-10-03 28 views
0

我有兩個MySQL表如下所示:如何在使用PDO進行連接後獲得正確的列?

Cat 
------ 
id : INT NOT NULL PRIMARY KEY 
name : VARCHAR(32) 

Cheezburger 
------- 
id : INT NOT NULL PRIMARY KEY 
catId : INT FOREIGN KEY REFERENCES Cat (id) 
pattyCount : INT 

當在兩個表LEFT JOIN使用PHP的PDO我會做我執行以下操作:

$database = new PDO("mysql:host=$hostname;dbname=$dbname", $username, $pasword); 
$query = $database->prepare(' 
    SELECT * FROM Cat 
    LEFT JOIN Cheezebuger.id ON Cheezburger.catId = cat.id 
    WHERE Cat.id = ?'); 
$query->bindParam(1, $someId); 
$query->execute(); 
$cat = $query-fetch(); 

我的問題是,如何能我區分與Cat表關聯的id字段和與Cheezburger表關聯的id$cat['id']正在給我id字段。

回答

3

這通常不適用於SELECT *。相反,你應該明確你想要的列,並指定別名名稱相似的列:

SELECT 
    Cat.id AS catid, 
    Cat.name AS name, 
    Cheezeburger.id AS chzid, 
    ... 
FROM 
    Cat LEFT JOIN Cheezebuger.id ON Cheezburger.catId = cat.id 
WHERE Cat.id = ? 

現在,檢索Cat.id,使用$cat['catid']並檢索Cheezeburger.id,使用$cat['chzid']

反對這樣做SELECT *一個強有力的理由是,如果你添加更多的列後未在應用程序中的這個特殊的部分需要,你將不會被使用數據庫服務器上的額外內存來檢索不需要的數據,並將其提取到Web應用程序將不會使用它。如果您之後碰巧添加了二進制BLOB列,則可能會不必要地拉動更多數據。

另一個原因是你發現的。您可以在列名中引起歧義。

+0

謝謝!我知道這可能是這樣簡單的事情,對於PHP和SQL來說還是很新的。 – Anthony

0

避免「懶惰」 *並指定字段,你要明確:

SELECT cat.ID AS catID, Cheezeburger.id AS icanhaz ... 
0

您需要枚舉領域,並一一列舉出來,所以它會像

SELECT cat.id as catId, cat.name, cheezburger.id as cheezId ... 
相關問題