Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

các bản ghi hoạt động codeigniter tham gia bằng cách sử dụng?

Không có hỗ trợ tích hợp cho JOIN ... USING trong lớp ghi hoạt động. Tốt nhất bạn nên thay đổi join() chức năng như thế này (tệp là system/database/DB_active_rec.php trong trường hợp bạn không biết)

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

Vì vậy, bạn có thể chỉ cần sử dụng điều này trong mã của mình join('table', 'USING ("something")')

Mặc dù vậy, bạn có thể muốn mở rộng lớp thay vì sửa đổi nó để bạn không cần phải làm lại nhiều việc khi nâng cấp CI của mình. Hãy xem phần này bài viết hoặc this (hoặc tìm kiếm trên google) nếu bạn muốn thay thế.

Hoặc nếu bạn không muốn gặp phải những rắc rối đó, bạn có thể viết một hàm trợ giúp đơn giản có thể làm điều tương tự.

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

Sau đó, chỉ cần tải trình trợ giúp và gọi hàm như sau join_using('table', 'key') . Sau đó, nó sẽ tạo ra kết quả giống như bạn làm với join() ban đầu ngoại trừ cái này sẽ cung cấp cho bạn USING thay vì ON điều kiện.

Ví dụ:

// $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. Các bảng MySQL rất nhỏ có bỏ qua các chỉ mục không?

  2. Mysql:Cập nhật trường của hầu hết các bản ghi mới nhất

  3. Quá nhiều bảng; MySQL chỉ có thể sử dụng 61 bảng trong một phép nối

  4. Chèn bằng PreparedStatement. Làm cách nào để tự động tăng ID?

  5. Làm thế nào để chèn dữ liệu json vào bảng?