2014-01-12 30 views
1

我正在使用MySQL和PHP 5.3.8的Web應用程序。我們有一種機制將簡化的查詢指令轉換爲完整的查詢字符串,包括連接。PDostatement :: fetch()和重複的字段名稱

因爲我不知道什麼(規範化)表將會被連接以及它們被調用的是什麼字段,可能會有重複的字段名稱。當執行PDOStatement::fetch(PDO::FETCH_ASSOC),我得到字段名的關聯數組:

$test = $this->DBConnection->prepare("SELECT `events`.`Title`, `persons`.`Title` FROM `events` JOIN `persons` ON `events`.`HostID` = `persons`.`ID`;"); 
$test->execute(); 
$test->fetch(); 

但我沒有區分重複字段名稱,如「標題」的方式。更糟的是,重複覆蓋對方:

array('Title' => 'Frodo Baggins'); 

在壞日子,我在每場跑mysql_fetch_field()拿到表中的每個領域。請告訴我,有一個比字段前綴更好的方法(SELECT events.Title AS eventsTitle;)。

非常感謝您的幫助!

+0

您可以像使用MySQL一樣執行「分組依據」,但根據將數據添加到數據庫的方式,它可能會禁止大量數據或允許所有內容,因爲該字段可能並不重要。 //看完後沒有用 – qooplmao

+0

這與問題有什麼關係? – Barmar

+0

是的,當我看到你的無答案「答案」時,我才意識到問題真的在問什麼。 – qooplmao

回答

3

給他們別名查詢,以便它們不會被重複:

SELECT events.Title AS eTitle, persons.Title AS pTitle FROM ... 

然後將該行會是:

array('eTitle' => 'Hobbit Meeting', 'pTitle' => 'Frodo Baggins'); 

另一種方法是將結果作爲一個索引數組,而取比聯:

$test->fetch(PDO::FETCH_NUM); 

你將得到:

array('Hobbit Meeting', 'Frodo Baggins'); 

並且您可以將它們作爲$row[0]$row[1]訪問。

+0

謝謝。這是唯一的方法嗎? – PeerBr

+0

使用'PDO :: FETCH_NUM'添加了一個替代方案。 – Barmar