sql >> Databáze >  >> RDS >> Mysql

Počet řádků v Doktríně 2

Pokud budete používat pouze MySQL, můžete využít jeho FOUND_ROWS() funkce.

To bude vyžadovat použití nativních dotazů, což bude s největší pravděpodobností bránit vaší schopnosti používat jinou databázi než MySQL, ale podle mých zkušeností to funguje docela dobře.

S velkým úspěchem jsem použil něco jako následující.

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;
}

Po získání pole výsledků z výše uvedené funkce extrahuji prvek 'foundRows' do samostatné proměnné, zruším jeho nastavení (tj. unset($results['foundRows']) ) a poté pokračujte v používání pole jako obvykle.

Doufám, že to pomůže.




  1. Jak přidat uživatelskou skupinu Active Directory jako přihlášení na SQL Server

  2. Proveďte automatické zvýšení vyplnění dříve smazaného čísla

  3. Existuje způsob, jak nepoužívat hranaté závorky v SQL Server?

  4. Rozdíly mezi databází a schématem pomocí různých databází?