【问题标题】:How to write a subquery refactoring WITH clause using Zend framework?如何使用 Zend 框架编写子查询重构 WITH 子句?
【发布时间】:2012-08-29 22:26:03
【问题描述】:

我想在 Zend 框架的 SQL 查询中使用WITH 语法,SQL 如下所示:

WITH t AS
(SELECT item_id, row_number() OVER (ORDER BY some_criteria DESC) rn
   FROM orders)
SELECT t2.rn, t2.item_id
  FROM t t1 JOIN t t2 ON (t2.rn > t1.rn)
 WHERE t1.item_id = 145;

如何在 Zend Framework 中执行此操作? Zend_Db_Select?有什么建议吗?

【问题讨论】:

    标签: sql oracle zend-framework zend-db zend-db-select


    【解决方案1】:

    使用 Zend_Db_Select 你不能以漂亮的方式做到这一点,所以我建议你使用简单的查询:

    $q = "WITH t ..."
    $db->fetchAll($q);
    

    【讨论】:

      【解决方案2】:

      我引用-

      使用 Zend_Db_Select 不是强制性的。对于非常简单的 SELECT 查询, 将整个 SQL 查询指定为字符串通常更简单,并且 使用 query()fetchAll() 等适配器方法执行它。使用 如果您需要组装 SELECT 查询,Zend_Db_Select 会很有帮助 程序上,或基于应用程序中的条件逻辑。

      所以你可以试试这个

      $wthselect = 'WITH t AS
                (SELECT item_id, row_number() OVER (ORDER BY some_criteria DESC) rn
                    FROM orders)
               SELECT t2.rn, t2.item_id
                 FROM t t1 JOIN t t2 ON (t2.rn > t1.rn)
                 WHERE t1.item_id = 145';
      
      $stmt = $select->query($wthselect);
      $result = $stmt->fetchAll();
      

      【讨论】:

        【解决方案3】:

        Zend_Db_Select 如果查询有点复杂,应用程序中包含参数和逻辑,则很有用,正如另一个答案中已经引用的那样。查看official Zend Framework 上的此链接,了解此指令的详细说明。

        还可以查看来自 Zend Framework 社区的this useful link,特别是this post。它清楚地表明,对于您发布的小型且不复杂的查询,使用fetchAll()query() 指令更简单。

        因此,我的建议是,针对您的情况使用 fetchAll()query()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-04-03
          • 1970-01-01
          • 2010-11-23
          • 2011-06-22
          • 2019-09-02
          • 1970-01-01
          • 2021-02-21
          • 2011-08-26
          相关资源
          最近更新 更多