Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

codeigniter catatan aktif bergabung dengan menggunakan?

Tidak ada dukungan bawaan untuk JOIN ... USING di kelas rekaman aktif. Taruhan terbaik Anda mungkin akan mengubah join() fungsinya menjadi seperti ini (filenya adalah system/database/DB_active_rec.php jika Anda tidak tahu)

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;
}

Jadi, Anda cukup menggunakan ini dalam kode Anda join('table', 'USING ("something")')

Meskipun demikian, Anda mungkin ingin memperluas kelas daripada memodifikasinya sehingga Anda tidak perlu melakukan hal yang sama berulang-ulang saat Anda meningkatkan CI Anda. Lihat artikel atau yang ini (atau cari di google) jika Anda ingin melakukannya.

Atau jika Anda tidak ingin mengalami semua masalah itu, Anda dapat menulis fungsi pembantu sederhana yang dapat melakukan hal yang sama.

<?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;
}  

Nanti, muat saja helper dan panggil fungsi seperti ini join_using('table', 'key') . Kemudian akan menghasilkan hasil yang sama seperti yang Anda lakukan dengan join() original yang asli kecuali yang ini akan memberi Anda USING bukannya ON kondisi.

Misalnya:

// $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. Menetapkan nilai kolom sebagai nama kolom dalam hasil kueri SQL

  2. Permintaan SQL mengembalikan false di PHP

  3. hasilkan klausa where di bash menggunakan variabel

  4. Sintaks PDO yang tepat untuk kueri berparameter menggunakan LIKE dengan wildcard (mis. %, _)

  5. Mencoba memigrasi server mysql lokal ke AWS