Извлечение данных из двух баз данных diff в формате CI с перекрестными условиями - PullRequest
0 голосов
/ 07 декабря 2018
$this->fifo_db->select('u.name,d.title');
$this->fifo_db->from('tbl_user u');
$this->db->join('designations d','d.id = u.designationid','left');
$this->db->where(array('u.designationid > ' => 1,'d.salary > ' => '20000'));
$query = $this->fifo_db->get();
return $query->result_array();

Попытка извлечь данные в формате CI с помощью объединения двух таблиц из разных БД с ошибкой на одном и том же.

1 Ответ

0 голосов
/ 09 декабря 2018

Я думаю, вам нужно добавить префикс ссылок на таблицы к имени базы данных.

Этот код не использует Query Builder или псевдонимы таблиц по нескольким причинам.

  1. Чтобы доказать концепцию нескольких баз данных, проще написать полную строку запроса.
  2. Я не уверен, насколько хорошо псевдонимы будут работать вместе с префиксами имени базы данных, а такжеЯ знаю, как псевдоним при включении имени БД.

Я проверяю возвращаемое значение db->query, потому что это будет FALSE, если запрос вызывает ошибку.Если $query - ЛОЖЬ, вызов $query->result_array() вызовет исключение.

Вам нужны реальные имена баз данных.Я составил имена dbU и dbD.

$sql = "SELECT dbU.tbl_user.name, dbD.designations.title FROM dbU.tbl_user  
        LEFT JOIN dbD.designations ON dbD.designations.id = dbU.tbl_user.designationid
        WHERE dbU.tbl_user.designationid > 1 AND dbD.designations.salary > 20000";

$query = $this->db->query($sql);

if($query !== FALSE)
{
    return $query->result_array();
}

return NULL;

Не думаю, что будет иметь значение, какой объект базы данных CI (fifo_db или db) вы используете.Я почти уверен, что базы данных должны быть на одном сетевом сервере.

Если вышеописанное работает, вы можете добавить псевдонимы, а затем, если это работает, реорганизовать его для использования Query Builder.Честно говоря, я не вижу причин для QB на основе показанного запроса.Но у вас могут быть более сложные потребности, которыми вы не делитесь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...