如何使用Zend框架编写子查询重构WITH子句?

时间:2012-08-29 22:26:04

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

我想在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?有什么建议吗?

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分:0)

我引用 -

  

使用 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();

答案 2 :(得分:0)

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

同时检查Zend Framework社区中的this useful link,特别是this post。它清楚地表明,对于小型和非复杂查询,与您发布的查询一样,使用fetchAll()query()指令更为简单。

所以,我的建议是,根据您的情况使用fetchAll()query()