Zend framework2 使用Zend Framework 2和tableGateway进行计数和分组

Zend framework2 使用Zend Framework 2和tableGateway进行计数和分组,zend-framework2,Zend Framework2,在Zend Framework 2中,我想使用tableGateway运行以下SQL查询: SELECT categories.category_name, COUNT(forums.forum_id) FROM categories LEFT JOIN forums ON categories.category_id = forums.category_id GROUP BY categories.category_name; 问题是我根本不知道怎么做。例如,我知道如

在Zend Framework 2中,我想使用tableGateway运行以下SQL查询:

  SELECT categories.category_name, COUNT(forums.forum_id)
    FROM categories LEFT JOIN forums
      ON categories.category_id = forums.category_id
GROUP BY categories.category_name;
问题是我根本不知道怎么做。例如,我知道如何使用
$select->join()
,但我不知道如何同时进行
计数和
分组


我想要我的SQL:我有两个表<代码>类别
论坛
。我想从
类别中选择所有类别,并为每个类别选择论坛数量。

您的查询看起来不错。当您直接在数据库上运行它时,它是否按预期工作

我认为您可能只需要使用适配器执行原始查询

$sql = "SELECT categories.category_name, COUNT(forums.forum_id) FROM categories LEFT JOIN forums ON     categories.category_id = forums.category_id GROUP BY categories.category_name";

$statement = $this->adapter->query($sql);
return $statement->execute();

另一个论坛上有人给了我正确的答案,这对我来说很有用。我想我会分享它,以防其他人有类似的问题。以下是我现在的情况:

使用Zend\Db\Sql\Expression

$resultSet = $this->tableGateway->select(function (Select $select)
{
    // Select columns and count the forums.
    $select->columns(array(
        'category_name',
        'forumsCount' => new Expression('COUNT(forums.forum_id)')
    ));

    // Left-join with the forums table.
    $select->join('forums', 'categories.category_id = forums.category_id', array(), 'left');

    // Group by the category name.
    $select->group('categories.category_name');
});

return $resultSet;

检查,应该类似于
$select->(新表达式('COUNT(forums.forum\u id)AS ForumCount'))
不幸的是,我无法将其用于tableGateway。我真的希望使用可用的方法,而不是使用实际的SQL。是的,当我在PhpMyAdmin中运行查询时,它工作得很好。请共享该链接,以便我们可以获得其他内容,例如限制、位置和所有…@kumar我的问题不在这里volve
limit
where
语句,因此它也不在答案中。我们如何在block@khunshan只需添加
use($var)
到我答案代码第一行的最后。变量
$var
可以在
tableGateway
函数之前的方法中定义,也可以来自方法的参数。是的,我知道了。我们必须在闭包中传递作用域。谢谢@Nic