У меня есть следующие две таблицы:
Foo:
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» и т. Д.), t нужно указать и псевдоним каждого отдельного столбца в запросе?
Я прочитал всю документацию по различным режимам выборки и экспериментировал с большинством флагов / опций , но по-прежнему не могу найти то, что я ищу.
Обновить:
Используя 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" }