2013-05-08 29 views
11

Ho un problema con la mia query e Ho bisogno di unire due tabelle da diversi database ora il mio problema è come posso eseguire la mia query. Ho ottenuto il mio formato di sintassi da quiCome eseguire la query SQL in CodeIgniter

Si prega di visitare prima questo link così si potrebbe capire perché la mia sintassi SQL è come questo
http://www.x-developer.com/php-scripts/sql-connecting-multiple-databases-in-a-single-query


Im utilizzando CodeIgniter e qui è un'idea di ciò che la mia domanda si presenta come:
Notate il modo in cui sto selezionando le mie colonne: 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; 

problema principale: Come concludere la mia domanda?
Se lo facciamo in questo modo in CodeIgniter:

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

Come posso eseguire il mio query che Im che ha più database? Cosa fornirò qui
[database]->query($SQL);?

+0

chk this- http://stackoverflow.com/questions/7601028/using-multiple-databases-within-codeigniter –

+0

Hai davvero bisogno di due database per questo, potrebbe essere più facile usare due tabelle? – Ryan

+0

signore @SureshKamrushi non hai ottenuto la mia domanda, so come definire i database in CI, sto provando ad unire 2 tabelle da 2 diversi database, cosa fornirò nella sintassi di CI 'your_database-> query (SQL); '? dal momento che sto interrogando da due database –

risposta

11

Se il server database condivisione, hanno un account di accesso che ha privilegi per entrambi i database, e semplicemente avere una simile corsa query:

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

Altrimenti penso che potrebbe essere necessario eseguire le 2 domande separatamente e aggiusta la logica in seguito.

+0

Ho 3 database caricati nel mio file 'config.php'. Ho questi $ $ ENROLLEES = $ this-> load-> database ('ENROLLEES', TRUE); $ ACCOUNTS = $ this-> load-> database ('ACCOUNTS', TRUE); 'ovviamente l'ultimo è il' default'. se uso '$ this-> db-> query()' Significherebbe che Im usa il database predefinito. –

+1

Avresti solo bisogno di una connessione, cioè di un "carico sul database". Se l'utente che carichi ha accesso a tutti i database dati in questo caso. E quando si recuperano le tabelle, è possibile specificare il 'database' .table'. –

+0

intendi signore che non caricherò i miei altri 2 database e userò il mio default? –

2

posso vedere quello @ disgelo menzionato:

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

CodeIgniter supporta più database. È necessario mantenere entrambi i riferimenti del database in una variabile separata come hai fatto sopra. Finora hai ragione/corretto.

Dopodiché è necessario utilizzare loro come di seguito:

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

e

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

Invece di usare

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

Vedere questo per riferimento: http://ellislab.com/codeigniter/user-guide/database/connecting.html

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

return $query->result_array(); 
+0

Questo dovrebbe essere evitato a tutti i costi per alcuni buoni motivi: 1) Ignora il pattern Active Record Pattern (= ARP), Code-Igniter fornisce come queste sono query "native". 2) Devi prenderti cura di fuggire da solo (CI lo fa per te quando usi ARP). In caso contrario, è probabile che avvengano ** iniezioni SQL **. 3) La memorizzazione nella cache dei risultati della query potrebbe non influire su di essi, risultando in più istruzioni SQL e prestazioni inferiori. In altre parole: Riscrivi la tua query SQL in ARP che è il modo comune con 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-> selezionare ('id, nome, prezzo, autore, categoria, lingua, ISBN, data_pubblicazione');

 $this->db->from('tbl_books'); 
Problemi correlati