5

我想WITH在 Zend 框架中使用 SQL 查询中的语法,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?有什么建议么?

4

3 回答 3

3

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

$q = "WITH t ..."
$db->fetchAll($q);
于 2012-08-30T07:05:12.973 回答
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();
于 2012-09-05T21:51:38.483 回答
0

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

还可以查看Zend Framework 社区的这个有用链接,特别是这篇文章。它清楚地表明,对于您发布的小型且不复杂的查询,使用fetchAll()orquery()指令更简单。

所以,我的建议是,使用fetchAll()orquery()来处理你的情况。

于 2012-09-06T08:23:03.623 回答