【问题标题】:Using Doctrine DBAL to count number of rows from SELECT query使用 Doctrine DBAL 从 SELECT 查询中计算行数
【发布时间】:2013-02-04 17:42:29
【问题描述】:

好的,所以我正在寻找一种简洁的方法来计算使用 Doctrine DBAL 的 SELECT 查询的行数。

我知道我可以SELECT COUNT(*) 但是当我获取结果时我需要对数组进行排序。或者,建议查看getScalarResult()。但除了 DQL(这是一个不同的项目)之外,我似乎找不到任何关于此的文档。

那么最简洁的方法是什么?我猜是因为我习惯了伟大的 MySQLI 属性num_rows

【问题讨论】:

标签: php doctrine-orm


【解决方案1】:

我喜欢使用查询生成器。一个例子:

    $queryBuilder = $connection->createQueryBuilder();
    $queryBuilder->select('COUNT(*)');
    $queryBuilder->from("the_table");
    $queryBuilder->where('some_column = :theValue');
    $queryBuilder->setParameter('theValue', $someValue);

    return (int) $queryBuilder->execute()->fetchColumn();

【讨论】:

    【解决方案2】:

    其实我还以为自己看的很辛苦,结果才看到这个Count Records Returned MySQL Doctrine

    所以实现它的方法是通过rowCount() 方法。

    例子:

    $num_rows = $conn->executeQuery("SELECT * FROM users")->rowCount();

    【讨论】:

    • 只有在您无论如何都需要获取记录时才有意义。否则获取所有记录只是为了在 PHP 中计算它们在性能方面是个坏主意。
    • 请注意,rowCount 并非对所有数据库都是 100% 可信任的,行为可能会根据您使用的数据库而改变。此注释是从方法的源代码中复制粘贴的。 如果关联的 Statement 对象执行的最后一条 SQL 语句是 SELECT 语句,则某些数据库可能会返回该语句返回的行数。但是,不能保证所有数据库都具有此行为,并且不应依赖于可移植应用程序。 link
    【解决方案3】:

    使用 Doctrine DBAL 执行此操作的另一种方法是将计数作为字段获取并返回列

        $sql = "SELECT count(*) AS Total FROM myTable WHERE myId = :myId";
        $stmt = $conn->prepare($sql);
        $stmt->bindValue('myId', $myId, PDO::PARAM_INT);
        $stmt->execute();
        $count = $stmt->fetchColumn(0);
    

    【讨论】:

      猜你喜欢
      • 2015-11-09
      • 1970-01-01
      • 2011-07-15
      • 2016-04-18
      • 2011-10-07
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多