我正在尝试使用Zend框架做一组.这是我的代码:
$table = new TableClass();
$select = $table->select();
$select->from ("table", array("date", "column1" => "sum(column1)"));
$select->group ( array ("date") );
$results = $table->fetchAll ($select);
$result = $results[0];
$date = $result->date;
$column1 = $result->column1;
Run Code Online (Sandbox Code Playgroud)
TableClass扩展了'Zend_Db_Table_Abstract'.
我可以通过查看mysql查询日志来查看查询.查询格式正确 - 在查询中命名了column1,如果我在mysql workbench中运行查询,结果看起来是正确的.
我无法访问'column1'中的数据 - 我总是遇到这个异常:
未捕获的异常'Zend_Db_Table_Row_Exception',消息'Specified column"column1"不在行中'
但是,我可以毫无问题地访问日期列.
我试过了:
通过数组索引访问列:$ result [0]但是你得到一个异常(不能通过索引访问列).
不使用列别名:$ select-> from("table",array("date","sum(column1)")); $ column1 = $ result ["sum(column1)"]; 但是你得到一个例外(没有这样的列"sum(column1)").
抛出Zend_Db_Expr:"column1"=> new Zend_Db_Expr("sum(column1)")但这没有帮助.
我见过的其他一些例子建议使用没有聚合函数的列名,即.而不是"总和(列1)","列1",但似乎并没有给我的答案 - 查询不具有任何聚合函数所以MySQL将不知道该怎么用它做.
任何帮助赞赏.
首先,使用Zend_Db_Select(以及扩展名Zend_Db_Table_Select)的快速提示,您可以通过调用toString方法来查看生成的SQL.在使用结果集之前验证代码是否生成正确的查询至关重要:
$select = $table->select();
$select->from ("table", array("date", "column1" => "sum(column1)"));
$select->group ( array ("date") );
$sql = (string) $select; //Retrieve SQL as a string
Run Code Online (Sandbox Code Playgroud)
或者干脆
die($select); //print SQL
Run Code Online (Sandbox Code Playgroud)
我使用您的示例编写了以下测试脚本,没有任何问题:
class Table extends Zend_Db_Table_Abstract
{
protected $_primary = 'id';
protected $_name = 'table';
}
$db = Zend_Db::factory('Pdo_Mysql', array(
'dbname' => 'test',
'username' => 'root',
'password' => '',
'host' => 'localhost'
));
$table = new Table($db);
$select = $table->select();
$select->from ($table, array("date", "column1" => new Zend_Db_Expr("sum(column1)")));
$select->group ( array ("date") );
$sql = (string) $select;
echo $sql;
$results = $table->fetchAll ($select);
$result = $results[0];
$date = $result->date;
$column1 = $result->column1;
echo '<br>' . $date . ': ' . $column1;
Run Code Online (Sandbox Code Playgroud)
使用Zend_Debug :: dump($ result); 如有必要,检查Zend_Db_Table_Row中的数据.
在我的例子中,生成的SQL如下:
SELECT `table`.`date`, sum(column1) AS `column1` FROM `table` GROUP BY `date`
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
19471 次 |
| 最近记录: |