2013-05-08 6 views
11

Ich habe ein Problem mit meiner Abfrage und Ich muss zwei Tabellen aus verschiedenen Datenbanken verbinden jetzt ist mein Problem, wie kann ich meine Abfrage ausführen. Ich habe meine Syntax-Format von hierWie führe ich meine SQL-Abfrage in CodeIgniter

besuchen Sie bitte diesen Link zuerst, so dass Sie verstehen konnten, warum meine SQL-Syntax wie diese
http://www.x-developer.com/php-scripts/sql-connecting-multiple-databases-in-a-single-query


Im mit CodeIgniter ist und hier ist eine Idee von dem, was meine Frage wie folgt aussieht:
Beachten Sie die Art, wie ich bin der Auswahl meiner Spalten: 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; 

Hauptproblem: Wie Ausführen meiner Anfrage?
Wenn wir in codeigniter wie folgt tun:

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

Wie kann ich ausführen meine Frage, dass Im mehrere Datenbanken mit? Was werde ich hier zur Verfügung stellen
[database]->query($SQL);?

+0

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

+0

Benötigen Sie wirklich zwei Datenbanken dafür, könnte es einfacher sein, zwei Tabellen zu verwenden? – Ryan

+0

sir @SureshKamrushi Sie haben meine Frage nicht bekommen, ich weiß, wie man Datenbanken in CI definiert, ich versuche, 2 Tabellen aus 2 verschiedenen Datenbanken zu verbinden, was werde ich in der CI-Syntax 'Ihre_Datenbank-> Abfrage (SQL) bereitstellen;'? da ich abfragen von zwei Datenbanken –

Antwort

11

Wenn die Datenbanken Aktie Server, eine Anmeldung, die Privilegien zu beiden Datenbanken hat, und einfach eine Abfrage ausführen similiar müssen:

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

Ansonsten denke ich, Sie könnten die zwei Abfragen ausführen müssen separat und fixiere die Logik danach.

+0

Ich habe 3 Datenbanken in meine 'config.php' Datei geladen. Ich habe diese '$ ENROLLEES = $ this-> load-> Datenbank ('ENROLLEES', TRUE); $ ACCOUNTS = $ this-> load-> Datenbank ('ACCOUNTS', TRUE); 'offensichtlich ist der letzte der' Default'. Wenn ich '$ this-> db-> query()' verwende, würde das bedeuten, dass ich die Standarddatenbank benutze. –

+1

Sie würden nur eine Verbindung benötigen, das heißt ein "Laden in die Datenbank". Wenn der Benutzer, mit dem Sie laden, in diesem Fall Zugriff auf alle angegebenen Datenbanken hat. Und beim Abrufen von Tabellen können Sie die 'datenbank'.tabelle' angeben. –

+0

meinst du mein Herr, dass ich meine 2 anderen Datenbanken nicht laden würde und nur meinen Standard verwenden? –

2

kann ich sehen, was @ auftauen erwähnt:

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

CodeIgniter mehrere Datenbanken unterstützt. Sie müssen beide Datenbankverweise wie oben in separaten Variablen beibehalten. Bis jetzt hast du recht/richtig.

Als nächstes müssen Sie sie wie unten verwenden:

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

und

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

Statt

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

dies Siehe Referenzen: http://ellislab.com/codeigniter/user-guide/database/connecting.html

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

return $query->result_array(); 
+0

Dies sollte aus ein paar guten Gründen um jeden Preis vermieden werden: 1) Es wird das Active Record Pattern (= ARP) umgangen, das Code-Igniter bereitstellt, da es sich um "native" Abfragen handelt. 2) Sie müssen sich selbst um die Flucht kümmern (CI macht es für Sie, wenn Sie ARP verwenden). Wenn Sie dies nicht tun, ** sind SQL-Injektionen ** sehr wahrscheinlich. 3) Die Zwischenspeicherung von Abfrageergebnissen wirkt sich nicht auf sie aus, was zu mehr SQL-Anweisungen und geringerer Leistung führt. Mit anderen Worten: Schreiben Sie Ihre SQL-Abfrage in ARP um, wie es bei CI 2/3 üblich ist. – 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-> wählen ('id, Name, Preis, Autor, Kategorie, Sprache, ISBN, publish_date');

 $this->db->from('tbl_books'); 
Verwandte Themen