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 は連想配列を返しますが、同じ名前で別のテーブルの列を上書きしないようにするにはどうすればよいですか?

4

2 に答える 2

-2
  • .* の使用はあまりお勧めしません。理由は次のとおりです。

    1. テーブル構造が変更された場合、列のインデックスが変更され、以前にインデックスで読み取っていた場合は、残念です。

    2. ほとんどの場合、実際にはすべての列を必要としないため、サーバーから取得するデータの量を減らすことができます (リモートの場合は意味があるかもしれません)。

とにかく、.* を使用しない場合は、次のように SQL クエリでエイリアスを使用できます。

SELECT products.id prodId, orders.id orderId FROM Orders LEFT JOIN Products ON (prodId = orders.product_id) WHERE orderId = @oid
于 2013-07-22T15:28:03.680 に答える