2014-01-12 2 views
1

MySQL 및 PHP 5.3.8을 사용하는 웹 응용 프로그램에서 작업하고 있습니다. 간단한 쿼리 명령을 조인을 포함한 전체 쿼리 문자열로 변환하는 메커니즘이 있습니다.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;)보다 좋은 방법이 있다고 말해주세요.

귀하의 도움에 감사드립니다.

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

그런 다음 행은 다음과 같습니다 :

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

대안이 아니라 인덱스 배열로 결과를 가져올 것입니다 그들이 중복되지 않도록

+0

MySQL과 마찬가지로 그룹화 할 수 있지만 데이터베이스에 데이터를 추가하는 방법에 따라 많은 부분을 허용하지 않거나 해당 필드가 약간 중요하지 않을 수도 있으므로 모든 것을 허용 할 수 있습니다. // 아무런 쓸모가 없어 보이는 후에 – qooplmao

+0

그게 무슨 문제인가? – Barmar

+0

그래, 나는 당신이 무응답 인 "대답"을 보았을 때 정말로 어떤 질문을하고 있는지 깨달았습니다. – qooplmao

답변

3

하면 쿼리에서 그들에게 별칭을 부여 연관보다 :

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

은 그럼 당신은 얻을 것이다 :

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

으로 표시되며 $row[0]$row[1]으로 액세스 할 수 있습니다.

+0

감사합니다. 그게 유일한 방법인가요? – PeerBr

+0

'PDO :: FETCH_NUM '을 사용하는 대안을 추가했습니다. – Barmar