2013-05-08 31 views
11

içinde SQL sorgumu yürütme Sorgumla ilgili bir sorunum var ve Farklı veritabanlarından iki tablo katılmaya ihtiyacım var şimdi benim sorunum nasıl yürütebilirim.
: benim SQL sözdizimi bu
http://www.x-developer.com/php-scripts/sql-connecting-multiple-databases-in-a-single-queryCodeIgniter


Im kullanarak CodeIgniter'da gibidir ve burada benim sorgu gibi göründüğüne ilişkin bir fikir olduğunu anlayacaksınız böylece ilk bu bağlantıyı ziyaret ediniz

buradan benim sözdizimi biçimi var Sütunlarımı seçerek ediyorum yolunu edin: 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; 

ANA SORUN: nasıl sorgu yürütme için?
biz CodeIgniter'daki böyle yaparsanız:

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

nasıl Im birden fazla veritabanı sahip bu benim sorgu yürütebilirsiniz

?
[database]->query($SQL);'u ne sağlayabilirim?

+0

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

+0

Bunun için iki veritabanına gerçekten ihtiyacınız var mı, iki tablo kullanmak daha kolay olabilir mi? – Ryan

+0

efendim @SureshKamrushi sen sormadı, CI veritabanları tanımlamak için biliyorum, 2 farklı veritabanından 2 tablo katılmaya çalışıyorum, ne CI sözdizimi 'your_database-> sorgu (SQL); Ben şirket tarafından tasarlanan veritabanı takip eden iki veritabanı –

cevap

11

Eğer veritabanları payı sunucusu, veritabanı hem ayrıcalıklar sahip bir oturum açma var ve basitçe bir sorgu çalıştırmak dağılımları benzer var: Ben ayrı ayrı 2 sorguları çalıştırmak zorunda kalabilirsiniz Aksi

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

ve sonra mantığı düzeltin.

+0

'config.php' dosyasında yüklü 3 veritabanım var. Bu $ ENROLLE = $ this-> load-> database'im var ('ENROLLEES', TRUE); $ ACCOUNTS = $ this-> load-> veritabanı ('HESAPLAR', DOĞRU), 'açıkçası son 'varsayılan'. '$ this-> db-> query()' kullanırsam, varsayılan veritabanını kullanmam anlamına gelir. –

+1

Sadece bir bağlantıya ihtiyacınız olacak, yani "veritabanına yükleme". Yüklediğiniz kullanıcının bu durumda tüm verilen veritabanlarına erişimi varsa. Tabloları getirirken, 'database'.'table'ı belirtebilirsiniz. –

+0

Yani 2 diğer veritabanımı yüklemediğim ve sadece varsayılanımı kullanamayacağımı mı söylüyorsunuz? –

2

Ben çözülme @ sözü görebilirsiniz:

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

CodeIgniter birden veritabanlarını destekler. Her iki veritabanı başvurusunu yukarıda yaptığınız gibi ayrı bir değişkende tutmanız gerekir. Şimdiye kadar haklısın.Referans için bu bakın

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

ve

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

yerine

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

kullanmanın:

Sonraki aşağıdaki gibi bunları kullanmak gerekir http://ellislab.com/codeigniter/user-guide/database/connecting.html

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

return $query->result_array(); 
+0

Bu, birkaç iyi nedenden ötürü her ne pahasına olursa olsun kaçınılmalıdır: 1) Aktif Kayıt Örüntüsünü (= ARP) atlamak, Kod-Ateşleyicinin "yerel" sorguları olduğundan emin olmaktır. 2) Kendiniz kaçmak için dikkatli olmalısınız (ARP'yi kullandığınızda CI sizin için yapar). Yapmazsanız, ** SQL enjeksiyonları ** çok olasıdır. 3) Sorgu sonuçlarının önbelleğe alınması, daha fazla SQL ifadesi ve daha az performansla sonuçlanmayabilir. Başka bir deyişle: SQL sorgunuzu, CI 2/3 ile ortak olan ARP'ye yeniden yazın. – 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, adı, fiyatı, yazar, kategori, dil, ISBN, PUBLISH_DATE') seçin;

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