【问题标题】:Zend Order by Cast with mysqlZend Order by Cast with mysql
【发布时间】:2011-12-19 11:51:51
【问题描述】:

我正在使用 Zend Framework 和 MySQL 数据库。

zend select 可以产生这样的结果吗?

SELECT * FROM `abc` ORDER BY CAST( `something` AS SIGNED ), `other` ASC

目前我给出原始 sql 查询,因为不知道如何让 zend 使用 $select->order(..) 并获取该查询...

我在想也许不是所有的 db 都支持这个,所以 zend 没有它或者为什么?

【问题讨论】:

    标签: zend-framework zend-db


    【解决方案1】:

    你可以使用 Zend_Db_Expr 类实例并将其传递给 order 方法

    【讨论】:

    • 原始 sql: SELECT * FROM abc ORDER BY CAST(something AS SIGNED), other ASC zend 查询: $this->select() ->order(new Zend_Db_Expr(" CAST(something 签名)").", 其他");
    • 我使用了这个 $select>order(new Zend_Db_Expr("CAST( alfa AS SIGNED )")) ->order('beta ASC');
    【解决方案2】:

    zend 中没有这样的关键字。我们不能在获取数据时进行强制转换,但可以在获取数据后进行强制转换。

    【讨论】:

    • 但是zend不能投射任何东西,他必须告诉数据库投射
    • 是的,我知道,但在 zend 中,查询的执行方式类似于 $table->select()->where();您可以通过更改 DB_Table_Row_Abstract 文件来转换查询。在该文件中进行自定义查询
    【解决方案3】:

    ZF2 2019 答案:

    $select->order(new Expression("CAST($orderColumn AS CHAR) $orderDirection"));
    

    由于new Zend_Db_Expr 不再工作(“重命名”)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多