2010-08-21 31 views
9

có như truy vấn zend:Zend-framework DB: HOẶC thay vì VÀ hành

$select = $this->_table 
       ->select() 
       ->where('title LIKE ?', '%'.$searchWord.'%') 
       ->where('description LIKE ?', '%'.$searchWord.'%') 
       ->where('verified=1 AND activated=1'); 

Nói cách khác, nó trông giống như:

SELECT `some_table`.* FROM `some_table` WHERE (title LIKE '%nice house%') AND (description LIKE '%nice house%') AND (verified=1 AND activated=1) 

Nếu tôi có vài VÀ câu, zend kết nối nó qua Toán tử AND. Làm thế nào tôi có thể kết nối nó với toán tử OR? Nguyên nhân tôi cần:

...(title LIKE '%nice house%') OR (description LIKE '%nice house%')... 

Trợ giúp của bạn sẽ được đánh giá cao.

+0

Tôi nghĩ rằng chỉ cần ưu tiên toán tử sql .. sẽ được tính đến, coz các truy vấn này sẽ được chuyển thành sql đơn giản. Tôi chỉ gợi ý rằng tôi cũng có nghi ngờ này và đến đây –

Trả lời

24
$this->_table->select()->orWhere($condition); 

Để tạo các truy vấn phức tạp hơn (ví dụ: điều kiện con) bạn có thể phải sử dụng $this->table->getAdapter()->quoteInto() và viết SELECT theo cách thủ công. (? Nữa)

1

tôi đã thực hiện truy vấn zend bạn

$select = $this->_table 
       ->select() 
       ->where('title LIKE ?', '%'.$searchWord.'%') 
       ->ORwhere('description LIKE ?', '%'.$searchWord.'%') 
       ->where('verified=1 AND activated=1'); 
1

Những người khác câu trả lời ở đây không làm việc, giải pháp hiện nay là để gọi tổ() và unnest() trong mệnh đề where:

$select->where 
    ->nest() 
     ->equalTo('column1', 1) 
     ->or 
     ->equalTo('column2', 2) 
    ->unnest() 
    ->and 
    ->equalTo('column3', 3); 
Các vấn đề liên quan