ZEND FW: объединение двух таблиц из разных баз данных - PullRequest
2 голосов
/ 13 января 2010

Я хочу объединить две таблицы в разных базах данных на одном сервере. Может кто-нибудь сказать мне, как я мог сделать это в адаптере Zend Frameworks Db?

Ответы [ 3 ]

0 голосов
/ 20 января 2010

Если базы данных находятся на одном сервере и ваш пользователь имеет доступ к ним обоим, вы можете использовать полный путь - ВЫБЕРИТЕ имя_базы_данных.имя_таблицы.col_name ...

В противном случае у вас нет шансов присоединиться к ним из-за принципа. Объединение выполняется SQL-сервером, который должен войти в другую базу данных ...

В Oracle есть функция DBLink ..., которая дает возможность связывать другие таблицы / представления с другого сервера. Не уверен насчет MySQL.

Для выполнения запросов с использованием различных адаптеров вы можете использовать:

$select1 = new Zend_Db_Select($adapter1);
$select2 = new Zend_Db_Select($adapter2);

Но опять же, вы все еще ограничены в таких вещах, как объединение этих двух ... Вы не можете сделать это из-за самой природы работы базы данных

0 голосов
/ 26 августа 2017

Создайте tableGateway из вашего dbAdapter перед объединением двух таблиц из другой базы данных.

use use Zend\Db\Sql\Select;
use Zend\Db\Sql\Where;

$someCondition=new Where();
$someCondition->equalTo('columnName',$columnValue);
//you can build $this->tableGateway from your DB adapter
$rowset = $this->tableGateway->select(function (Select $select) use ($someCondition) {
        $table2forInnerJoin = new \Zend\Db\Sql\TableIdentifier('table2Name', 'table2Database');
        $select->join(array('table2Name'=>$table2forInnerJoin),"table1Name.id = table2Name.id");
        $select->where($someCondition);
});
return $rowset;
...