2011-07-25 35 views
3

我有此查詢工作正常寫作MySQL查詢與Zend框架

SELECT t.username 
FROM users t LEFT JOIN friends y ON t.id=y.user_id2 and y.user_id1=2 
WHERE LOWER(t.username) LIKE 'ha%' 
ORDER BY 
    CASE WHEN y.user_id2 IS NULL THEN 1 
    ELSE 0 
    END  
    ,t.username; 

我試圖把它與Zend框架寫,這就是我想出了

 $users = new Users; 
     $select = $users->select(); 
     $select->setIntegrityCheck(false); 
     $select->from(array('t1' => 'users'), array('username')); 
     $select->joinLeft(array('t2' => 'friends'), 't1.id=t2.user_id2 and t2.user_id1 =2'); 
     $select->where("LOWER(t1.username) like '$input%'"); 
     $select->order("t1.username, CASE WHEN t2.user_id2 IS NULL THEN 1 ELSE 0 END "); 
     $listofusernames = $users->fetchAll($select); 

但它似乎不工作,我得到這個錯誤

Fatal error: Uncaught exception 'Zend_Db_Statement_Mysqli_Exception' with message 'Mysqli prepare error: Unknown column 't1.username, CASE WHEN t2.user_id2 IS NULL THEN 1 ELSE 0 END ' in 'order clause'' in /opt/lampp/htdocs/vote_old/library/Zend/Db/Statement/Mysqli.php:77 Stack trace: #0 

顯然它必須處理嵌入在order by子句中的情況。

你有什麼想法如何解決該代碼?

謝謝

回答

3

嘗試把列陣列like

$select->order(array('t1.username', 
       new Zend_Db_Expr ('CASE WHEN t2.user_id2 IS NULL THEN 1 ELSE 0 END'))); 
+0

還是同樣的錯誤 –

+0

ü肯定的是一樣的嗎?你可以顯示錯誤 –

+0

致命錯誤:未知的異常'Zend_Db_Statement_Mysqli_Exception'帶有消息'Mysqli prepare error:Unknown column'CASE WHEN t2.user_id2 IS NULL THEN 1 ELSE 0 END'in'order clause'' –