如何在 Zend 中使用表上的子查询执行查询并获取 Rowset 对象作为结果?
Posted
技术标签:
【中文标题】如何在 Zend 中使用表上的子查询执行查询并获取 Rowset 对象作为结果?【英文标题】:How to execute query with subqueries on a table and get a Rowset object as a result in Zend? 【发布时间】:2010-11-23 00:14:52 【问题描述】:我目前正在努力解决如何在 Zend 中对 Table 对象执行查询并获得 Rowset 作为回报。我特别需要 THIS 的原因是因为我正在修改现有项目的代码并且我没有太多的灵活性。
查询:
SELECT *
FROM `tblname` ud
WHERE ud.user_id = some_id
AND
(
(ud.reputation_level > 1)
OR
(
(SELECT COUNT( * )
FROM `tblname` t
WHERE t.user_id = ud.user_id
AND t.category_id <=> ud.category_id
AND t.city_id <=> ud.city_id
) = 1
)
)
有没有办法使用 Select 对象来描述这个查询?
以前的 SQL 解决方案非常简单,由一个 WHERE 子句组成:
$where = $this->getAdapter()->quoteInto("user_id = ?",$user_id);
return $this->fetchAll($where);
我需要生成相同类型的结果(以便它可以被现有代码处理)但用于更复杂的查询。
我尝试过的事情
$db = Zend_Db_Table::getDefaultAdapter();
return $db->query($sql)->fetchAll();
---------------- OR ----------------------
return $this->fetchAll($select);
---------------- OR ----------------------
return $this->_db->query($sql)->fetchAll();
但它们要么生成数组而不是对象,要么因基数违规消息而失败。
对于如何在 Zend 中处理 SQL 文本查询的任何帮助,我将不胜感激。
【问题讨论】:
【参考方案1】:$dbAdapter = Zend_Db_Table::getDefaultAdapter();
//change the fetch mode becouse you don't like the array
$dbAdapter->setFetchMode(Zend_Db::FETCH_OBJ);
$sql = "you're long sql here";
$result = $dbAdapter->fetchAll($sql);
Zend_Debug::dump($result);
exit;
有关所有获取模式的列表,请访问Zend_Db_Adapter
要使用 Zend_Db_Select 而不是手动字符串来编写查询,请查看 Zend_Db_Slect
【讨论】:
以上是关于如何在 Zend 中使用表上的子查询执行查询并获取 Rowset 对象作为结果?的主要内容,如果未能解决你的问题,请参考以下文章