我想在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
?有什么建议吗?
答案 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()
。