mam następujące dwie tabele:Automatyczne wygładzanie PDO podczas pobierania?
foo:
ID NUMBER(38)
DATA VARCHAR2(10)
bar:
ID NUMBER(38)
FOO_ID NUMBER(38)
DATA VARCHAR2(10)
Podczas korzystania PDO
wydać następujące zapytanie:
SELECT * FROM foo f INNER JOIN bar b ON (f.id = b.foo_id)
Czy istnieje sposób na odzyskanie wszystkich kolumn z łączenia w formie automatycznego wyrównania (np. "FOO.ID", "FOO.DATA", "BAR.ID", itp.), Aby nie trzeba było podawać i podawać wszystkich kolumn w zapytaniu?
Przeczytałem całą dokumentację różnych fetch modes i eksperymentowałem z większością flags/options, ale nadal nie mogę znaleźć tego, czego szukam.
Aktualizacja:
Korzystanie PDO::FETCH_ASSOC
, kolumny od foo
wydają się być nadpisane przez kolumny z bar
:
array(3) {
["ID"]=>
string(1) "1"
["DATA"]=>
string(5) "bar 1"
["FOO_ID"]=>
string(1) "1"
}
Korzystanie PDO::FETCH_NUM
, kolumny z obu foo
i bar
pojawiają , ale bez żadnego sposobu na określenie, które kolumny pochodziły z jakich tabel, chyba że znają zdrętwiałe er kolumn w każdej tabeli i dokładnej kolejności tych kolumn (podatne na błędy):
array(5) {
[0]=>
string(1) "1"
[1]=>
string(5) "foo 1"
[2]=>
string(1) "1"
[3]=>
string(1) "1"
[4]=>
string(5) "bar 1"
}
Korzystanie PDO::FETCH_BOTH
, że pozornie napotkasz tymi samymi problemami jak PDO::FETCH_ASSOC
i PDO::FETCH_NUM
połączeniu i stworzyć strasznie niezrozumiale zestaw wyników:
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"
}
Idealnie, zestaw wynik powinien wyglądać podobnie do tego:
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"
}
Zawsze możesz odnieść się do kolumny z jej kwalifikowaną nazwą 'tableName.columnName', jeśli tak, to co miałeś na myśli (nie jest to alias). – KingCrunch
W każdym razie dobrze jest wejść do jawnej listy kolumn w wybranych zapytaniach zamiast "SELECT *". –
@MichaelBerkowski: Niestety, nie mam tego luksusu w tym przypadku. – FtDRbwLXw6