Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

कोडनिर्देशक सक्रिय रिकॉर्ड का उपयोग करने के साथ जुड़ते हैं?

JOIN ... USING . के लिए कोई अंतर्निहित समर्थन नहीं है सक्रिय रिकॉर्ड वर्ग में। आपका सबसे अच्छा दांव शायद join() . को बदल देगा इस तरह होने के लिए कार्य करें (फ़ाइल system/database/DB_active_rec.php है यदि आप नहीं जानते हैं)

public function join($table, $cond, $type = '')
{
    if ($type != '')
    {
        $type = strtoupper(trim($type));

        if ( ! in_array($type, array('LEFT', 'RIGHT', 'OUTER', 'INNER', 'LEFT OUTER', 'RIGHT OUTER')))
        {
            $type = '';
        }
        else
        {
            $type .= ' ';
        }
    }

    // Extract any aliases that might exist.  We use this information
    // in the _protect_identifiers to know whether to add a table prefix
    $this->_track_aliases($table);

    // Strip apart the condition and protect the identifiers
    if (preg_match('/([\w\.]+)([\W\s]+)(.+)/', $cond, $match))
    {
        $match[1] = $this->_protect_identifiers($match[1]);
        $match[3] = $this->_protect_identifiers($match[3]);

        $cond = $match[1].$match[2].$match[3];
    }

    // Assemble the JOIN statement
    $type.'JOIN '.$this->_protect_identifiers($table, TRUE, NULL, FALSE);

    $using_match = preg_match('/using[ (]/i', $cond);

    if ($using_match)
    {
        $join .= $cond;
    }
    else
    {
        $join .= ' ON '.$cond;
    }

    $this->ar_join[] = $join;
    if ($this->ar_caching === TRUE)
    {
        $this->ar_cache_join[] = $join;
        $this->ar_cache_exists[] = 'join';
    }

    return $this;
}

तो फिर, आप बस इसे अपने कोड join('table', 'USING ("something")') में इस्तेमाल कर सकते हैं

हालांकि, हो सकता है कि आप कक्षा को संशोधित करने के बजाय उसका विस्तार करना चाहें ताकि जब आप अपने सीआई को अपग्रेड करते हैं तो आपको एक ही काम को बार-बार करने की आवश्यकता नहीं होगी। इस पर एक नज़र डालें लेख या यह वाला (या गूगल सर्च करें) अगर आप इसके बजाय ऐसा करना चाहते हैं।

या अगर आप उन सभी परेशानियों को दूर नहीं करना चाहते हैं, तो आप एक साधारण हेल्पर फंक्शन लिख सकते हैं जो वही काम कर सकता है।

<?php  if ( ! defined('BASEPATH')) exit('No direct script access allowed');

function join_using($table, $key) 
{
    $CI = get_instance();
    $join = 'JOIN '. $table .' USING (`'. $key .'`)';
    return $CI->db->ar_join[] = $join;
}  

बाद में, बस हेल्पर को लोड करें और फंक्शन को इस तरह से कॉल करें join_using('table', 'key') . इसके बाद यह वही परिणाम देगा जो आप मूल join() . के साथ देंगे इसके अलावा आपको USING देगा ON . के बजाय हालत।

उदाहरण के लिए:

// $something1 and $something2 will produce the same result.
$something1 = $this->db->join('join_table', 'join_table.id = table.id')->get('table')->result();
print_r($something1);
join_using('join_table', 'id');
$something2 = $this->db->get('table')->result();
print_r($something2);



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. .NET में MySQL GeoSpatial डेटा प्रकारों का उपयोग करना

  2. एक MySQL डेटाबेस में CSV फ़ाइल के आयात पर अमान्य UTF-8 वर्ण स्ट्रिंग

  3. डॉकर से बाहर (1) के साथ mysql

  4. त्रुटि क्या है प्रत्येक व्युत्पन्न तालिका का MySQL में अपना उपनाम होना चाहिए?

  5. MySQL विदेशी कुंजी