2013-05-08 2 views
11

У меня проблема с моим запросом и Мне нужно объединить две таблицы из разных баз данных теперь моя проблема заключается в том, как я могу выполнить свой запрос. Я получил свой формат синтаксиса здесьКак выполнить мой SQL-запрос в CodeIgniter

Пожалуйста, посетите первую по этой ссылке, чтобы вы могли понять, почему мой SQL синтаксис как этот
http://www.x-developer.com/php-scripts/sql-connecting-multiple-databases-in-a-single-query


Im использованием CodeIgniter и здесь является идея о том, что мой запрос выглядит следующим образом:
Обратите внимание на то, как я выбирающий мои колонки: DATABASE_NAME.TABLE_NAME.COLUMN_NAME

$ENROLLEES = $this->load->database('ENROLLEES', TRUE); 
$ACCOUNTS = $this->load->database('ACCOUNTS', TRUE); 

$SELECT = "SELECT $ACCOUNTS.BALANCES_TABLE.IDNO, $ACCOUNTS.BALANCES_TABLE.balance"; 
$FROM  = "FROM $ACCOUNTS.BALANCES_TABLE"; 
$WHERE  = "$ACCOUNTS.BALANCES_TABLE.IDNO IN (SELECT $ENROLLEES.ENROLLEES_TABLE.IDNO FROM $ENROLLEES.ENROLLEES_TABLE)"; 

$SQL  = $SELECT ." ". $FROM ." ". $WHERE; 

ОСНОВНАЯ ПРОБЛЕМА: Как выполнить мой запрос?
Если мы делаем, как это в CodeIgniter:

$ENROLLEES->query($SQL); or $ACCOUNTS->query($SQL); 

Как я могу выполнить мой запрос, что Im имея несколько баз данных? Что я предложу здесь
[database]->query($SQL);?

+0

CHK этом- http://stackoverflow.com/questions/7601028/using-multiple-databases-within-codeigniter –

+0

Вам действительно нужны две базы данных, может быть проще использовать две таблицы? – Ryan

+0

sir @SureshKamrushi, вы не получили мой вопрос, я знаю, как определить базы данных в CI, я пытаюсь присоединиться к 2 таблицам из двух разных баз данных, что я буду предоставлять в синтаксисе CI 'your_database-> query (SQL);'? так как я запрашиваю из двух баз данных –

ответ

11

Если сервер базы данных доля, есть логин, который имеет специальными разрешениями на обеих базах данных, а просто есть запустить запрос похож на:

$query = $this->db->query(" 
SELECT t1.*, t2.id 
FROM `database1`.`table1` AS t1, `database2`.`table2` AS t2 
"); 

В противном случае я думаю, что вы, возможно, придется запустить 2 запросов отдельно и затем исправить логику.

+0

У меня есть 3 базы данных, загруженные в файл 'config.php'. У меня есть эта база данных $ ENROLLEES = $ this-> load-> ('ENROLLEES', TRUE); $ ACCOUNTS = $ this-> load-> database ('ACCOUNTS', TRUE); 'очевидно, последний является' default'. если я использую '$ this-> db-> query()' Это будет означать, что Im использует базу данных по умолчанию. –

+1

Вам потребуется только одно соединение, то есть одно «загрузка в базу данных». Если пользователь, с которым вы загружаете, имеет доступ ко всем данным базам данных в этом случае. А при извлечении таблиц вы можете указать 'database'.'table'. –

+0

Вы имеете в виду сэр, что я бы не загрузил 2 других базы данных и просто использовал мой дефолт? –

2

Я могу видеть, что @ оттепели отметил:

$ENROLLEES = $this->load->database('ENROLLEES', TRUE); 
$ACCOUNTS = $this->load->database('ACCOUNTS', TRUE); 

CodeIgniter поддерживает несколько баз данных. Вам нужно сохранить ссылку базы данных в отдельной переменной, как вы это делали выше. Пока вы правы/правильны.

Далее вы должны использовать их, как показано ниже:

$ENROLLEES->query(); 
$ENROLLEES->result(); 

и

$ACCOUNTS->query(); 
$ACCOUNTS->result(); 

Вместо использования

$this->db->query(); 
$this->db->result(); 

Смотрите это для справки: http://ellislab.com/codeigniter/user-guide/database/connecting.html

24
$query = $this->db->query($SQL); 

return $query->result_array(); 
+0

Этого следует избегать любой ценой по нескольким причинам: 1) Он обходит шаблон активной записи (= ARP), Code-Igniter обеспечивает, поскольку это «родные» запросы. 2) Вы должны позаботиться о том, чтобы убежать от себя самостоятельно (CI делает это для вас, когда вы используете ARP). Если вы этого не сделаете, ** SQL-инъекции **, скорее всего, произойдут. 3) Кэширование результатов запроса может не повлиять на них, что приведет к появлению большего числа операторов SQL и меньшей производительности. Другими словами: перепишите свой SQL-запрос в ARP, что является общим способом с CI 2/3. – Roland

0
return $this->db->select('(CASE 
      enter code hereWHEN orderdetails.ProductID = 0 THEN dealmaster.deal_name 
      WHEN orderdetails.DealID = 0 THEN products.name 
      END) as product_name') 
0

$ this-> db-> выберите ('ID, название, цена, автор, категория, язык, ISBN PUBLISH_DATE');

 $this->db->from('tbl_books'); 
Смежные вопросы