2012-12-17 27 views

Trả lời

5

Nếu bạn muốn

SELECT `tbl_md_users`.* 
FROM `tbl_md_users` 
WHERE 
    user_type <> 'TYPE1') 
AND (first_name LIKE '%tom%' OR first_name LIKE '%dick%' OR first_name LIKE '%harry%') 

thì câu trả lời đầu tiên không hoạt động

tôi đã sử dụng Zend_Db_Expr thay

$likeTom = new Zend_Db_Expr("first_name LIKE '%tom%'"); 
$likeDick = new Zend_Db_Expr("first_name LIKE '%dick%'"); 
$likeHarry = new Zend_Db_Expr("first_name LIKE '%harry%'"); 

$query = $database->select() 
    ->from ('tbl_md_users') 
    ->where ('user_type <> ?', 'TYPE1') 
    ->where ("{$likeTom} OR {$likeDick} OR {$likeHarry}"); 
0

Tôi nghĩ rằng không có cách nào để sử dụng Zend_Db_Select cho việc này. Bạn có thể sử dụng

$this->table->getAdapter()->quoteInto() 

Để viết truy vấn tùy chỉnh.

+0

Tôi đang tìm cách để làm điều này bằng cách sử dụng các phương pháp Zend, nhưng như bạn đã đề cập họ không hỗ trợ điều đó, tôi phải thực hiện một cách giải quyết như bạn đã đề xuất, dù sao cũng được. – user1890970

4
$query = $database->select() 
     ->from ('tbl_md_users') 
     ->where ('user_type <> ?', 'TYPE1') 
     ->where ("first_name LIKE '%?%' OR last_name LIKE '%?%' OR user_name LIKE '%?%'", 'tom'); 
+0

Cảm ơn, có vẻ như cách giải quyết dễ nhất cho điều này là Zend_Db_Select không có phương pháp riêng của họ để viết yêu cầu trên. – user1890970

1

hiện nay, up-to-date là giải pháp để 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