Mysql
 sql >> база данни >  >> RDS >> Mysql

Брой редове в доктрина 2

Ако ще използвате само MySQL, тогава можете да се възползвате от неговия FOUND_ROWS() функция.

Това ще изисква използването на собствени заявки, което най-вероятно ще попречи на способността ви да използвате DB, различна от MySQL, но според моя опит работи доста добре.

Използвах нещо като следното с голям успех.

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. MariaDB:Мога ли да извлека дублиращи се имена на колони, без да използвам „AS“

  2. Съвпадение на Mysql...срещу просто като %term%

  3. Какво е еквивалентът на bind_result в PDO

  4. Как да изберете максимум 3 елемента на потребител в MySQL?

  5. Използвайте тригер, за да спрете вмъкване или актуализиране