2013-07-22 2 views
0

, 생성 된 배열에 같은 이름의 키를 덮어 쓰지 않도록 :는, 나는 이렇게 PDO에 참여하고있는 중이 야

SELECT users.*,images.*, sessions.*,social.*,videos.*,teams.*,achievements.*,_achievements_list.* FROM users LEFT JOIN images ON users.user_id=images.user_id LEFT JOIN sessions ON users.user_id=sessions.user_id LEFT JOIN social ON users.user_id=social.user_id LEFT JOIN videos ON users.user_id=videos.user_id LEFT JOIN teams ON users.user_id=teams.user_id LEFT JOIN achievements ON users.user_id=achievements.user_id LEFT JOIN _achievements_list ON achievements.achievement_id=_achievements_list.parent_id WHERE users.nickname = 'something' 
문제는 일부 테이블에서, 그래서 일부 열에 대해 같은 이름을 가지고있다

PDO가 저에게 제공하는 배열은 많은 것들이 덮어 씌여집니다. 나는이

을 사용하고 있습니다 :

$statement = $this->pdo->prepare($query); 

    if ($statement->execute($param)) 
     return $statement->fetchAll(PDO::FETCH_ASSOC); 
    return false; 

PDO는 연관 배열을 반환하지만 어떻게 같은 이름을하지만 서로 다른 테이블에서 덮어 열을 피하기 위해해야합니까?

+0

사용 FETCH_ALL처럼 SQL 쿼리 에 별칭을 사용할 수 있습니다, 나는 두 번 당신이 그런 식으로 (이 모든 것을해야합니다 생각 : 한 번에 수로 d는 한 번 열 이름으로) – Sebas

+0

정확히 같은 질문 일주일 전 : http://stackoverflow.com/q/17715049/285587 –

+0

또 다른 방법은 이러한 모든 테이블에 다른 쿼리를 만드는 것입니다. –

답변

-1
  • 매우 사용하지 않는 것이 좋습니다 * 이유는 다음과 같습니다.

    1. 테이블 구조 변경, 다음 열 인덱스가 변경하는 경우

      , 당신은 인덱스를 읽는 데 사용하는 경우, 다음 너무 나쁜.

(가 원격 인 경우 다음도 meanningful 수 있습니다)

  • 주로, 당신은 정말 모든 열을 필요가없는, 따라서 당신은 당신이 서버에서 검색 할 데이터의 양을 줄일 수 . 어쨌든, 당신이 해달라고하면 사용 * 대신 FETCH_ASSOC의

    SELECT products.id prodId, orders.id orderId FROM Orders LEFT JOIN Products ON (prodId = orders.product_id) WHERE orderId = @oid 
    
  • +0

    당신은 분명히 할 수 있습니까 (1) 제발? 비록 열 인덱스가 변경 되더라도 쿼리를 다시 작성할 필요가 없습니다. 그게 뭐가 잘못 됐어? –

    +0

    은 MyTable : ID, fldA, FldB, FldC가있는 쿼리'Select * from myTable'을 고려합니다. myRecord [2] <= 인덱스를 사용하면 fldB가됩니다. (1) 테이블 스키마를 변경 한 경우 fldA를 제거하면 FldB 대신 FldC가 반환됩니다. (2) FldB를 삭제하거나 이름을 변경하면 간단한 오류 대신 오히려 가로 채기가 더 어려워지는 동작 버그가 발생합니다. –

    +0

    PHP에서는 대개 위치가 아닌 이름으로 필드를 지정합니다. 그래서, 그것은 문제가되지 않습니다. –

    관련 문제