2013-05-08 8 views
11

में मेरी SQL क्वेरी को निष्पादित करने के लिए कैसे करें मुझे अपनी क्वेरी और में कोई समस्या है, मुझे अलग-अलग डेटाबेस से दो टेबलों में शामिल होने की आवश्यकता है अब मेरी समस्या यह है कि मैं अपनी क्वेरी कैसे निष्पादित कर सकता हूं। मैं यहाँ सेकोडइग्निटर

मेरी वाक्य रचना प्रारूप मिला कृपया पहले इस लिंक पर जाएं तो आप समझ सकते हैं क्यों मेरे SQL सिंटैक्स इस
http://www.x-developer.com/php-scripts/sql-connecting-multiple-databases-in-a-single-query


इम CodeIgniter का उपयोग कर की तरह है और यहाँ क्या मेरी क्वेरी की तरह दिखता है की एक विचार है:
सूचना रास्ता मैं अपने कॉलम का चयन कर रहा हूँ: 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; 

मुख्य समस्या: कैसे मेरी क्वेरी निष्पादित करने के लिए?
हम CodeIgniter में इस तरह करते हैं:

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

मैं अपने प्रश्न है कि मैं विभिन्न डेटाबेस होने पर अमल कर सकते हैं? मैं यहां
[database]->query($SQL); प्रदान करूंगा?

+0

जच इस- http://stackoverflow.com/questions/7601028/using-multiple-databases-within-codeigniter –

+0

क्या आपको वास्तव में इसके लिए दो डेटाबेस की आवश्यकता है, दो टेबल का उपयोग करना आसान हो सकता है? – Ryan

+0

महोदय @ सुरेशकमुरुशी आपको मेरा प्रश्न नहीं मिला, मुझे पता है कि सीआई में डेटाबेस को कैसे परिभाषित किया जाए, मैं 2 अलग-अलग डेटाबेस से 2 टेबल में शामिल होने की कोशिश कर रहा हूं, मैं सीआई के सिंटैक्स 'your_database-> क्वेरी (एसक्यूएल) में क्या प्रदान करूंगा; '? चूंकि मैं कंपनी द्वारा डिजाइन किए गए डेटाबेस के बाद दो डेटाबेस –

उत्तर

11

तो डेटाबेस शेयर सर्वर, एक लॉगिन डेटाबेस दोनों के लिए विशेषाधिकार है कि है, और बस एक प्रश्न रन समान है:

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

अन्यथा मुझे लगता है कि आप 2 प्रश्नों अलग से चलाने के लिए हो सकता है और बाद में तर्क ठीक करें।

+0

मेरे पास मेरी 'config.php' फ़ाइल में लोड 3 डेटाबेस हैं। मेरे पास इन '$ ENROLLEES = $ this-> लोड-> डेटाबेस ('एनरोलेस', TRUE) हैं; $ ACCOUNTS = $ this-> लोड-> डेटाबेस ('खाते', TRUE); 'जाहिर है कि अंतिम' डिफ़ॉल्ट 'है। अगर मैं '$ this-> डीबी-> क्वेरी() का उपयोग करता हूं, तो इसका मतलब यह होगा कि मैं डिफ़ॉल्ट डेटाबेस का उपयोग कर रहा हूं। –

+1

आपको केवल एक कनेक्शन की आवश्यकता होगी, यह एक "डेटाबेस में लोड" है। यदि आपके द्वारा लोड किए गए उपयोगकर्ता के पास इस मामले में दिए गए सभी डेटाबेस तक पहुंच है। और टेबल लाने पर, आप 'डेटाबेस'' 'table' निर्दिष्ट कर सकते हैं। –

+0

क्या आपका मतलब महोदय है कि मैं अपने 2 अन्य डेटाबेस लोड नहीं करूँगा और बस अपना डिफ़ॉल्ट उपयोग करूंगा? –

2

मैं देख सकता हूँ क्या @ पिघलना उल्लेख किया:

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

CodeIgniter विभिन्न डेटाबेस का समर्थन करता है। जैसा कि आपने उपर्युक्त किया है, आपको अलग-अलग चर में दोनों डेटाबेस संदर्भ रखने की आवश्यकता है। अब तक आप सही/सही हैं।

अगला आप उन्हें नीचे के रूप में उपयोग करने की आवश्यकता: इसके बजाय

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

का उपयोग करने का

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

और

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

संदर्भ के लिए इस देखें: http://ellislab.com/codeigniter/user-guide/database/connecting.html

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

return $query->result_array(); 
+0

कुछ अच्छे कारणों से इसे हर कीमत से बचा जाना चाहिए: 1) यह सक्रिय रिकॉर्ड पैटर्न (= एआरपी) को छोड़ रहा है, कोड-इग्निटर प्रदान कर रहा है क्योंकि ये "मूल" प्रश्न हैं। 2) आपको अपने आप से बचने का ख्याल रखना होगा (जब आप एआरपी का उपयोग करते हैं तो सीआई आपके लिए करता है)। यदि आप नहीं करते हैं, ** एसक्यूएल इंजेक्शन ** होने की संभावना है। 3) क्वेरी परिणामों की कैशिंग उन्हें प्रभावित नहीं कर सकती है, जिसके परिणामस्वरूप अधिक SQL कथन और कम प्रदर्शन होता है। दूसरे शब्दों में: अपनी एसक्यूएल क्वेरी को एआरपी में लिखें जो सीआई 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-> का चयन करें ('आईडी, नाम, मूल्य, लेखक, वर्ग, भाषा, आई, PUBLISH_DATE');

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