sql >> データベース >  >> RDS >> Mysql

Doctrine2の行数

    MySQLのみを使用する場合は、その FOUND_ROWS() 機能。

    これにはネイティブクエリを使用する必要があり、MySQL以外のDBを使用する能力を妨げる可能性がありますが、私の経験では非常にうまく機能します。

    私は次のようなものを使用して大成功を収めました。

    use Doctrine\ORM\Query\ResultSetMapping;
    
    public function getRecentComments($offset, $id) {
        $sql = "SELECT SQL_CALC_FOUND_ROWS * FROM Comment c 
            WHERE c.game = ?
            ORDER BY c.date DESC
            LIMIT ?,3";
        $rsm = new ResultSetMapping();
        $rsm->addEntityResult('Comment', 'c');
        $rsm->addFieldResult('c', 'id', 'id');
        $rsm->addFieldResult('c', 'game_id', 'game_id');
        $rsm->addFieldResult('c', 'date', 'date');
        $query = $this->getEntityManager()->createNativeQuery($dql, $rsm);
        $query->setParameters(array(
          (int)$id,
          (int)$offset
        ));
        $results = $query->getResult();
    
        // Run FOUND_ROWS query and add to results array
        $sql = 'SELECT FOUND_ROWS() AS foundRows';
        $rsm = new ResultSetMapping();
        $rsm->addScalarResult('foundRows', 'foundRows');
        $query = $this->getEntityManager()->createNativeQuery($sql, $rsm);
        $foundRows = $query->getResult();
        $results['foundRows'] = $foundRows[0]['foundRows'];
    
        return $results;
    }
    

    上記の関数から結果の配列を取得した後、'foundRows'要素を別の変数に抽出し、設定を解除します(つまり、unset($results['foundRows']) )、その後、通常どおりアレイを使用し続けます。

    これがお役に立てば幸いです。




    1. 1か月の毎日の値を取得する方法

    2. MySQL INSERTパラメーターを使用したC#

    3. ユーザーが私のコンテンツプロバイダーの特定のテーブルにのみアクセスできるようにする

    4. 4つの主要なデータベースIDEツールを比較する