数据库
首页 > 数据库> > 使用zend框架编写mysql查询

使用zend框架编写mysql查询

作者:互联网

我有这个查询工作正常

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子句中嵌入的大小写有关.

你有什么想法如何解决该代码?

谢谢

解决方法:

尝试将列放入数组like

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

标签:sql-order-by,zend-framework,mysql
来源: https://codeday.me/bug/20191208/2089155.html