Php 如何在Zend\Db\Sql中使用聚合函数?
下面的代码给出了类Zend\Db\Sql\Expression的错误对象无法转换为字符串Php 如何在Zend\Db\Sql中使用聚合函数?,php,sql,zend-framework2,Php,Sql,Zend Framework2,下面的代码给出了类Zend\Db\Sql\Expression的错误对象无法转换为字符串 $select->join(array('tt' => 'discuss_thread_tag'), 'tt.tag_id = discuss_tag.tag_id', array(), 'left') ->join(array('t' => 'discu
$select->join(array('tt' => 'discuss_thread_tag'),
'tt.tag_id = discuss_tag.tag_id',
array(),
'left')
->join(array('t' => 'discuss_thread'),
't.thread_id = tt.thread_id',
array(new Expression('COUNT(thread_id) AS thread_count')),
'left')
->join(array('m' => 'discuss_message'),
'm.thread_id = t.thread_id',
array(new Expression('MAX(post_time) AS last_post')),
//'*',
'left')
->group(array('discuss_tag.name', 'discuss_tag.slug', 'discuss_tag.description'));
我做错了什么?我还没有测试过这个,但我认为应该是这样的:
$select->join(array('tt' => 'discuss_thread_tag'),
'tt.tag_id = discuss_tag.tag_id',
array(),
\Zend\Db\Sql\Sql::JOIN_LEFT)
->join(array('t' => 'discuss_thread'),
't.thread_id = tt.thread_id',
array('thread_count' => new Expression('COUNT(thread_id)')),
\Zend\Db\Sql\Sql::JOIN_LEFT)
->join(array('m' => 'discuss_message'),
'm.thread_id = t.thread_id',
array('last_post' => new Expression('MAX(post_time)')),
\Zend\Db\Sql\Sql::JOIN_LEFT)
->group(array('discuss_tag.name', 'discuss_tag.slug', 'discuss_tag.description'));
// Debug query
$sql = new \Zend\Db\Sql\Sql();
var_dump($sql->getSqlStringForSqlObject($select));
我没有测试过这个,但我认为应该是这样的:
$select->join(array('tt' => 'discuss_thread_tag'),
'tt.tag_id = discuss_tag.tag_id',
array(),
\Zend\Db\Sql\Sql::JOIN_LEFT)
->join(array('t' => 'discuss_thread'),
't.thread_id = tt.thread_id',
array('thread_count' => new Expression('COUNT(thread_id)')),
\Zend\Db\Sql\Sql::JOIN_LEFT)
->join(array('m' => 'discuss_message'),
'm.thread_id = t.thread_id',
array('last_post' => new Expression('MAX(post_time)')),
\Zend\Db\Sql\Sql::JOIN_LEFT)
->group(array('discuss_tag.name', 'discuss_tag.slug', 'discuss_tag.description'));
// Debug query
$sql = new \Zend\Db\Sql\Sql();
var_dump($sql->getSqlStringForSqlObject($select));
我没有测试过这个,但我认为应该是这样的:
$select->join(array('tt' => 'discuss_thread_tag'),
'tt.tag_id = discuss_tag.tag_id',
array(),
\Zend\Db\Sql\Sql::JOIN_LEFT)
->join(array('t' => 'discuss_thread'),
't.thread_id = tt.thread_id',
array('thread_count' => new Expression('COUNT(thread_id)')),
\Zend\Db\Sql\Sql::JOIN_LEFT)
->join(array('m' => 'discuss_message'),
'm.thread_id = t.thread_id',
array('last_post' => new Expression('MAX(post_time)')),
\Zend\Db\Sql\Sql::JOIN_LEFT)
->group(array('discuss_tag.name', 'discuss_tag.slug', 'discuss_tag.description'));
// Debug query
$sql = new \Zend\Db\Sql\Sql();
var_dump($sql->getSqlStringForSqlObject($select));
我没有测试过这个,但我认为应该是这样的:
$select->join(array('tt' => 'discuss_thread_tag'),
'tt.tag_id = discuss_tag.tag_id',
array(),
\Zend\Db\Sql\Sql::JOIN_LEFT)
->join(array('t' => 'discuss_thread'),
't.thread_id = tt.thread_id',
array('thread_count' => new Expression('COUNT(thread_id)')),
\Zend\Db\Sql\Sql::JOIN_LEFT)
->join(array('m' => 'discuss_message'),
'm.thread_id = t.thread_id',
array('last_post' => new Expression('MAX(post_time)')),
\Zend\Db\Sql\Sql::JOIN_LEFT)
->group(array('discuss_tag.name', 'discuss_tag.slug', 'discuss_tag.description'));
// Debug query
$sql = new \Zend\Db\Sql\Sql();
var_dump($sql->getSqlStringForSqlObject($select));
谢谢对表达式使用关联数组解决了我的问题。谢谢。对表达式使用关联数组解决了我的问题。谢谢。对表达式使用关联数组解决了我的问题。谢谢。对表达式使用关联数组解决了我的问题。