7

在 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()例如,我知道如何使用,但我不知道如何使用COUNTand GROUP BY

我的 SQL 想要什么:我有 2 个表;categoriesforumscategories我想从我想要论坛数量的每个类别中选择所有类别。

4

2 回答 2

15

另一个论坛上的某人给了我正确的答案,这对我有用。以为我会分享它,以防其他人有类似的问题。这是我现在的样子:

use 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;
于 2013-06-02T08:53:02.220 回答
1

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

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

$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();
于 2013-06-01T16:33:54.023 回答