7

首先,这就是我想要做的:

在库中的一个类中,我想计算搜索结果的总行数。该类使用由搜索结果的附加模型设置的选择对象。我现在的问题是,这个 select() 已经通过 from() 设置了请求的列,但是为了简单地计算我只想选择 id 的行,因为网站必须是高性能的。我不能简单地更改对象的值,因为我在库中使用它并且变量受到保护。不幸的是,Zend 没有 mySql count 命令的功能,我不想使用静态的 mySql 代码,因为将来我们可能会切换我们的数据库系统。

现在这是我的问题:

Zend_Select 是否有可能更改选定的列?

4

4 回答 4

17

试试这个:

$select->reset(Zend_Db_Select::COLUMNS)
       ->from('thetable', 'COUNT(*)');

用正确的表名替换“thetable”。

于 2012-08-08T12:32:43.880 回答
1

这是来自一个项目,未经测试,但其中之一应该可以工作。

$select->from(array("table_name" => "table_name"), array("my_col" => "COUNT(id)"));

或者

$select->from(array("table_name"), array("my_col" => "COUNT(id)"));

这与

SELECT COUNT(id) as my_col FROM table_name 

希望有帮助

杰克

于 2012-08-08T10:34:30.040 回答
1

这个对我不起作用(我只需要从一个连接表中选择):

$select->reset(Zend_Db_Select::COLUMNS)
   ->from('thetable', 'COUNT(*)');

也许是因为我有一些加入。但是,这里有一个解决方案:先使用 reset(),然后使用 columns():

$select->setIntegrityCheck(false)
        ->from(['t1' => 'table1'])
        ->join(['t2' => 't2'], 't1.id = t2.t1_id')
        ->reset(Zend_Db_Select::COLUMNS)
        ->columns('t1.*');

仅供参考,Zend Framework 的版本是 1.12

于 2014-08-22T15:44:43.677 回答
-1

要在 select 中使用 mysql 命令,您需要使用 Zend_Db_Expr:

$select = $this->select()
            ->from('myTable', new Zend_Db_Expr('COUNT(id) as count'));
echo $select; //SELECT COUNT(id) as count FROM myTable;
于 2012-08-08T11:05:50.230 回答