2012-01-12 2 views
0

При использовании Zend_Db_Table с и Zend_Db_Table_Select с Zend_Db_Adapter_Pdo_Pgsql, у меня возникли проблемы с помощью запроса на выборку:соединенные таблицы перезаписать столбцы

$rowset = $db->select()->from(array('a'=>'tablea')) 
      ->columns(array('a.a')) 
      ->join(array('b'=>'tableb'),'b.id = a.id', array('b.a')) 
      ->query()->fetchAll(); 

Ожидаемое содержимое строк: (в основном клавиши)

$rowset['a.a'] = "something"; 
$rowset['b.a'] = "somethingElse"; 

В фактическом содержании $rowset существует только $rowset['a'], без возможности разграничения между объединенными таблицами.

Любые решения для этого?


Когда только делает

$q = "SELECT * FROM tablea AS a 
JOIN tableb AS b ON a.key = b.fkey"; 
$dbtable->getAdapter()->fetchAll($q); 

Я тоже не понимаю, что я ожидал.

+0

Есть ли опечатка в вашем вопросе? По определению ключи массива уникальны, поэтому ваше «ожидаемое содержимое набора строк» ​​для меня не имеет смысла. –

+0

Когда я использую синтаксис ''tablename' AS 'alias'', я ожидаю, что мои результаты будут названы« alias ». '. Тогда они действительно уникальны. Но это не то, что здесь происходит. –

+0

ах, но на самом деле я перепутал со вторым '$ rowset ['b.a']' –

ответ

0

Чтобы различать таблицы a и b при наличии совпадающих имен столбцов, вы хотите, чтобы псевдоним столбцов в таблице b. Присоединение будет выглядеть примерно так:

->join(array('b' => 'tableb'), 'a.id = b.id', array('a_from_b' => 'b.a')) 

Обратите внимание, что условие «ВКЛЮЧЕНО» должно быть строкой, а не массивом.

+0

Спасибо. Это не самое элегантное решение. –