2013-05-08 20 views
11

Mam problem z moim zapytaniem i Potrzebuję połączyć dwie tabele z różnych baz danych teraz mój problem polega na tym, jak mogę wykonać moje zapytanie. Dostałem formatu składni stądJak wykonać moje zapytanie SQL w CodeIgniter

Zapraszamy pierwszy link, więc można zrozumieć, dlaczego mój składni SQL jest jak ten
http://www.x-developer.com/php-scripts/sql-connecting-multiple-databases-in-a-single-query


Im przy użyciu CodeIgniter i tu jest pomysł, co mój kwerendy wygląda następująco:
Zwróć uwagę na sposób mam wybranie moje kolumny: 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; 

główny problem: Jak wykonać mojej kwerendy?
Jeśli robimy tak w CodeIgniter:

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

Jak mogę zrealizować moje zapytanie, które Im mający wielu baz danych? Co tu podam
[database]->query($SQL);?

+0

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

+0

Czy naprawdę potrzebujesz dwóch baz danych do tego, może być łatwiej użyć dwóch tabel? – Ryan

+0

sir @SureshKamrushi nie dostałeś mojego pytania, wiem, jak zdefiniować do baz danych w CI, próbuję dołączyć 2 tabele z 2 różnych baz danych, co mogę podać w składni CI 'twoja_bazy danych-> zapytanie (SQL);'? ponieważ wysyłam zapytania z dwóch baz danych: –

Odpowiedz

11

Jeśli serwer bazy danych akcji, masz login, który posiada specjalnie uprawnionych do obu baz danych i po prostu mają podobne run zapytanie do:

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

przeciwnym razie myślę, że trzeba uruchomić 2 kwerend oddzielnie i potem popraw logikę.

+0

Mam 3 bazy danych załadowane do mojego pliku 'config.php'. Mam te '$ ENRLLEES = $ this-> load-> database ('ENROLLEES', TRUE); $ ACCOUNTS = $ this-> load-> database ('ACCOUNTS', TRUE); 'oczywiście ostatni jest' default'. jeśli użyję '$ this-> db-> query()' To znaczy, że używam domyślnej bazy danych. –

+1

Wymagałoby tylko jedno połączenie, czyli jedno "obciążenie bazy danych". Jeśli użytkownik, który załadujesz, ma w tym przypadku dostęp do wszystkich baz danych. A podczas pobierania tabel możesz określić 'database'.'table'. –

+0

masz na myśli, proszę pana, że ​​nie załadowałbym moich 2 innych baz danych i po prostu użyłbym moich domyślnych? –

2

widzę co @ odwilży wymienić:

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

CodeIgniter obsługuje wiele baz danych. Musisz zachować odniesienie do bazy danych w oddzielnej zmiennej, tak jak powyżej. Do tej pory masz rację/popraw.

Następnie trzeba użyć je jak poniżej:

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

i

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

Zamiast

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

Zobacz to na odniesienie: http://ellislab.com/codeigniter/user-guide/database/connecting.html

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

return $query->result_array(); 
+0

Należy tego unikać za wszelką cenę z kilku ważnych powodów: 1) Pomija się wzorzec rekordu aktywnego (= ARP), zapewnia go Code-Igniter, ponieważ są to "natywne" zapytania. 2) Musisz samodzielnie zadbać o ucieczkę (CI robi to za ciebie, gdy używasz ARP). Jeśli tego nie zrobisz, ** iniekcje SQL ** najprawdopodobniej się wydarzą. 3) Buforowanie wyników zapytania może nie mieć na nie wpływu, co skutkuje większą ilością instrukcji SQL i mniejszą wydajnością. Innymi słowy: Przepisz swoją kwerendę SQL do ARP, co jest powszechnym sposobem z 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-> select ('id, nazwa, cena, autora, kategorii, języka, ISBN, PUBLISH_DATE');

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