2012-06-13 43 views
14

Tôi có truy vấn mysql sau đây. Bạn có thể vui lòng cho tôi biết cách viết cùng một truy vấn theo cách Codeigniter không?Sử dụng mệnh đề Mysql WHERE IN trong mã vạch

SELECT * FROM myTable 
     WHERE trans_id IN (SELECT trans_id FROM myTable WHERE code='B') 
     AND code!='B' 
+0

bạn đã sử dụng subquery trong CodeIgniter như tôi gửi –

+1

Có, tôi đã cố gắng sử dụng nó thành công vài phút trước .. :) Cảm ơn :) –

+0

@raheelshan. Bạn vui lòng kiểm tra bài đăng này. http://stackoverflow.com/q/11045611/1209690 Cảm ơn :) –

Trả lời

25

Bạn có thể sử dụng cách truy vấn phụ của người ký mã để thực hiện việc này cho mục đích này, bạn sẽ phải hack codeigniter. như
này Tới hệ thống/cơ sở dữ liệu/DB_active_rec.php Hủy bỏ từ khóa công cộng hoặc bảo vệ khỏi các chức năng này

public function _compile_select($select_override = FALSE) 
public function _reset_select() 

viết Bây giờ subquery trong sẵn Và bây giờ ở đây là truy vấn của bạn với kỷ lục hoạt động

$this->db->select('trans_id'); 
$this->db->from('myTable'); 
$this->db->where('code','B'); 
$subQuery = $this->db->_compile_select(); 

$this->db->_reset_select(); 
// And now your main query 
$this->db->select("*"); 
$this->db->where_in("$subQuery"); 
$this->db->where('code !=', 'B'); 
$this->db->get('myTable'); 

Và mọi việc đã xong. Chúc mừng !!!
Lưu ý: Trong khi sử dụng các truy vấn phụ bạn phải sử dụng

$this->db->from('myTable') 

thay vì

$this->db->get('myTable') 

chạy truy vấn.
Watch this quá

How can I rewrite this SQL into CodeIgniter's Active Records?

Lưu ý: Trong Codeigntier 3 các chức năng này đã được cộng đồng do đó bạn không cần phải hack chúng.

0

thử điều này:

return $this->db->query(" 
    SELECT * FROM myTable 
    WHERE trans_id IN (SELECT trans_id FROM myTable WHERE code='B') 
    AND code!='B' 
    ")->result_array(); 

Không phải là kỷ lục hoạt động nhưng là CodeIgniter của cách http://codeigniter.com/user_guide/database/examples.html thấy Query Chuẩn Với Nhiều kết quả (Mảng Version) phần

7

Hãy thử điều này một:

$this->db->select("*"); 
$this->db->where_in("(SELECT trans_id FROM myTable WHERE code = 'B')"); 
$this->db->where('code !=', 'B'); 
$this->db->get('myTable'); 

Lưu ý: $ this-> db-> select ("*"); là tùy chọn khi bạn chọn tất cả các cột từ bảng

15
$data = $this->db->get_where('columnname',array('code' => 'B')); 
$this->db->where_in('columnname',$data); 
$this->db->where('code !=','B'); 
$query = $this->db->get(); 
return $query->result_array(); 
+1

Điều này phù hợp với nhu cầu của tôi một cách hoàn hảo, Cảm ơn bạn! – Nebri

Các vấn đề liên quan