2013-05-08 38 views
11

Tôi gặp vấn đề với truy vấn của mình và Tôi cần tham gia hai bảng từ các cơ sở dữ liệu khác nhau bây giờ vấn đề của tôi là làm cách nào để thực hiện truy vấn của mình. Tôi đã định dạng cú pháp của tôi từ đâyLàm cách nào để thực thi truy vấn SQL của tôi trong CodeIgniter

Vui lòng truy cập đầu tiên liên kết này để bạn có thể hiểu tại sao cú pháp SQL của tôi là như thế này
http://www.x-developer.com/php-scripts/sql-connecting-multiple-databases-in-a-single-query


Im sử dụng CodeIgniter và đây là một ý tưởng về những gì truy vấn của tôi trông giống như:
Chú ý cách tôi chọn cột của tôi: 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; 

vấn đề chính: Làm thế nào để Thực hiện truy vấn của tôi?
Nếu chúng ta làm như thế này trong CodeIgniter:

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

Làm thế nào tôi có thể thực hiện truy vấn của tôi mà Im có nhiều cơ sở dữ liệu? Tôi sẽ cung cấp những gì ở đây
[database]->query($SQL);?

+0

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

+0

Bạn có thực sự cần hai cơ sở dữ liệu cho điều đó, có thể dễ dàng hơn khi sử dụng hai bảng? – Ryan

+0

sir @SureshKamrushi bạn không nhận được câu hỏi của tôi, tôi biết cách xác định cơ sở dữ liệu trong CI, tôi đang cố gắng tham gia 2 bảng từ 2 cơ sở dữ liệu khác nhau, tôi sẽ cung cấp cú pháp của CI 'your_database-> query (SQL); kể từ khi tôi đang truy vấn từ hai cơ sở dữ liệu –

Trả lời

11

Nếu máy chủ cơ sở dữ liệu phần, có một tên đăng nhập có đặc quyền để cả hai cơ sở dữ liệu, và chỉ đơn giản là có một tương tự chạy truy vấn để:

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

Nếu không tôi nghĩ bạn có thể phải chạy 2 truy vấn riêng biệt và sửa logic sau đó.

+0

Tôi có 3 cơ sở dữ liệu được tải trong tập tin 'config.php' của tôi. Tôi có các '$ ENROLLEES = $ this-> load-> database ('ENROLLEES', TRUE); $ ACCOUNTS = $ this-> load-> database ('ACCOUNTS', TRUE); 'rõ ràng là cuối cùng là' default'. nếu tôi sử dụng '$ this-> db-> query()' Nó có nghĩa là Im sử dụng cơ sở dữ liệu mặc định. –

+1

Bạn sẽ chỉ yêu cầu một kết nối, đó là một "tải cơ sở dữ liệu". Nếu người dùng bạn tải có quyền truy cập vào tất cả các cơ sở dữ liệu đã cho trong trường hợp này. Và khi tìm nạp các bảng, bạn có thể chỉ rõ 'database'.'table'. –

+0

bạn có nghĩa là sir rằng tôi sẽ không tải 2 cơ sở dữ liệu khác của tôi và chỉ sử dụng mặc định của tôi? –

2

tôi có thể xem những gì @ Thaw đề cập:

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

CodeIgniter hỗ trợ nhiều cơ sở dữ liệu. Bạn cần giữ cả hai tham chiếu cơ sở dữ liệu trong biến riêng biệt như bạn đã làm ở trên. Cho đến nay bạn đã đúng/đúng.

Tiếp theo, bạn cần phải sử dụng chúng như sau:

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

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

Thay vì sử dụng

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

Xem này để tham khảo: http://ellislab.com/codeigniter/user-guide/database/connecting.html

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

return $query->result_array(); 
+0

Điều này nên tránh bằng mọi giá vì một vài lý do chính đáng: 1) Nó đang bỏ qua Mô hình Bản ghi Hoạt động (= ARP), Bộ Ghi mã đang cung cấp vì đây là các truy vấn "gốc". 2) Bạn phải tự lo hết mình (CI thực hiện điều đó cho bạn khi bạn sử dụng ARP). Nếu bạn không, ** tiêm SQL ** rất có thể xảy ra. 3) Caching kết quả truy vấn có thể không ảnh hưởng đến chúng, dẫn đến nhiều câu lệnh SQL hơn và hiệu suất thấp hơn. Nói cách khác: Viết lại truy vấn SQL của bạn vào ARP, đây là cách phổ biến với 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, tên, giá cả, tác giả, thể loại, ngôn ngữ, ISBN, PUBLISH_DATE');

 $this->db->from('tbl_books'); 
Các vấn đề liên quan