私は次の2つの表があります。PDOフェッチ時の自動エイリアシング?
SELECT * FROM foo f INNER JOIN bar b ON (f.id = b.foo_id)
:次のクエリを発行する
PDO
を使用する場合
ID NUMBER(38)
FOO_ID NUMBER(38)
DATA VARCHAR2(10)
:
FOO:
ID NUMBER(38)
DATA VARCHAR2(10)
バー
戻す方法はありますか?すべてのの列は、結合からの何らかの種類の自動エイリアス形式(例: "FOO.ID"、 "FOO.DATA"、 "BAR.ID"など)を使用して、クエリ内のすべての列を指定したりエイリアスする必要はありません。
fetch modesのドキュメントをすべて読んで、flags/optionsのほとんどを試しましたが、まだ私が探しているものが見つからないようです。
更新:PDO::FETCH_ASSOC
を使用して
、foo
から列がbar
から列によって上書きされているように見える:PDO::FETCH_NUM
を使用して
array(3) {
["ID"]=>
string(1) "1"
["DATA"]=>
string(5) "bar 1"
["FOO_ID"]=>
string(1) "1"
}
、foo
とbar
両方の列が表示されます、順番に、ただし、どの列がどのテーブルから来たのかを特定することはありません。ただし、各テーブル内の列のERおよびそれらの列の正確な順序(エラープローン):PDO::FETCH_BOTH
を使用
array(5) {
[0]=>
string(1) "1"
[1]=>
string(5) "foo 1"
[2]=>
string(1) "1"
[3]=>
string(1) "1"
[4]=>
string(5) "bar 1"
}
は、我々は、一見PDO::FETCH_ASSOC
と組み合わせPDO::FETCH_NUM
同じ問題に実行し、恐ろしく不明瞭結果セットを作成します。
array(8) {
["ID"]=>
string(1) "1"
[0]=>
string(1) "1"
["DATA"]=>
string(5) "bar 1"
[1]=>
string(5) "foo 1"
[2]=>
string(1) "1"
["FOO_ID"]=>
string(1) "1"
[3]=>
string(1) "1"
[4]=>
string(5) "bar 1"
}
理想的には、結果セットは次のようになります。
array(5) {
["FOO.ID"]=>
string(1) "1"
["FOO.DATA"]=>
string(5) "foo 1"
["BAR.ID"]=>
string(1) "1"
["BAR.FOO_ID"]=>
string(1) "1"
["BAR.DATA"]=>
string(5) "bar 1"
}
名前が 'tableName.columnName'の修飾名であれば、いつでも参照することができます(これは別名ではありません)。 – KingCrunch
「SELECT *」ではなく、SELECTクエリで明示的に列を列挙するのは良い習慣です。 –
@MichaelBerkowski:残念ながら、私はこの事例では贅沢はありません。 – FtDRbwLXw6