sql >> Database >  >> RDS >> Mysql

Aantal rijen in Leer 2

Als u alleen MySQL gaat gebruiken, kunt u profiteren van de FOUND_ROWS() functie.

Dit vereist het gebruik van native queries, wat hoogstwaarschijnlijk uw vermogen om een ​​andere DB dan MySQL te gebruiken zal belemmeren, maar het werkt redelijk goed in mijn ervaring.

Ik heb zoiets als het volgende met groot succes gebruikt.

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

Nadat ik de resultatenarray van de bovenstaande functie heb gekregen, extraheer ik het element 'foundRows' naar een afzonderlijke variabele, zet het uit (d.w.z. unset($results['foundRows']) ), en ga dan door met het normaal gebruiken van de array.

Ik hoop dat dit helpt.




  1. Kan geen verbinding maken met de postgres-server in een docker vanuit een gedockte app

  2. Gegevens draaien in T-SQL

  3. Voeg DATE- en TIME-velden toe om het DATETIME-veld in MySQL te krijgen

  4. MySQL-server is verdwenen met Ruby on Rails