次の2つのテーブルがあります。
フー:
ID NUMBER(38)
DATA VARCHAR2(10)
バー:
ID NUMBER(38)
FOO_ID NUMBER(38)
DATA VARCHAR2(10)
PDO
次のクエリを発行するために使用する場合:
SELECT * FROM foo f INNER JOIN bar b ON (f.id = b.foo_id)
結合からすべての列を何らかの自動エイリアス形式 (「FOO.ID」、「FOO.DATA」、「BAR.ID」など) に戻す方法はありますか?クエリ内のすべての列を指定してエイリアスする必要はありませんか?
さまざまなフェッチ モードに関するドキュメントをすべて読み、ほとんどのフラグ/オプションを試しましたが、探しているものが見つからないようです。
アップデート:
を使用するPDO::FETCH_ASSOC
と、 の列が の列foo
で上書きされているように見えますbar
:
array(3) {
["ID"]=>
string(1) "1"
["DATA"]=>
string(5) "bar 1"
["FOO_ID"]=>
string(1) "1"
}
を使用すると、とPDO::FETCH_NUM
の両方の列が順番に表示されますが、各テーブルの列の数とそれらの列の正確な順序を知る以外に、どの列がどのテーブルから来たかを識別する方法はありません (エラーが発生しやすい):foo
bar
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_BOTH
同じ問題に遭遇し、恐ろしく理解できない結果セットが作成されます。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"
}