首先,这就是我要做的事情:
在我的库中的一个类中,我想计算搜索结果的总行数。该类使用由搜索结果的附属模型设置的选择对象。我现在的问题是,这个select()已经通过from()设置了所请求的列,但是为了简单地计算我想要选择id的行,因为网站必须具有高性能。我不能简单地更改对象的值,因为我在库中使用它并且变量受到保护。不幸的是,Zend没有mySql count命令的功能,我不想使用静态mySql代码,因为它可能是我们将来切换我们的数据库系统。
现在这是我的问题:
Zend_Select是否有可能更改所选列?
答案 0 :(得分:16)
试试这个:
$select->reset(Zend_Db_Select::COLUMNS)
->from('thetable', 'COUNT(*)');
用正确的表名替换'thetable'。
答案 1 :(得分: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
希望有所帮助
杰克
答案 2 :(得分: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
答案 3 :(得分:-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;