如何在 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 对象作为结果?的主要内容,如果未能解决你的问题,请参考以下文章

SUM GROUP BY与多个表上的子查询

MySQL INSERT 在同一张表上使用带有 COUNT() 的子查询

万答#1,MySQL中如何查询某个表上的IS(意向共享)锁

万答#1,MySQL中如何查询某个表上的IS(意向共享)锁

Redshift 表 - 查找表上查询的最后日期

《叶问》31期,MySQL中如何查询某个表上的IS(意向共享)锁