Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Đếm số hàng trong Doctrine 2

Nếu bạn chỉ sử dụng MySQL, thì bạn có thể tận dụng lợi thế của FOUND_ROWS() chức năng.

Điều này sẽ yêu cầu sử dụng các truy vấn gốc, điều này rất có thể sẽ cản trở khả năng sử dụng DB khác với MySQL của bạn, nhưng theo kinh nghiệm của tôi thì nó hoạt động khá tốt.

Tôi đã sử dụng một cái gì đó như sau và rất thành công.

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

Sau khi lấy mảng kết quả từ hàm trên, tôi trích xuất phần tử 'foundRows' thành một biến riêng biệt, bỏ đặt nó (tức là unset($results['foundRows']) ), và sau đó tiếp tục sử dụng mảng như bình thường.

Hy vọng điều này sẽ hữu ích.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Thêm khóa ngoại vào bảng hiện có gây ra lỗi 1050 bảng đã tồn tại

  2. Tách giá trị từ một trường thành hai trường

  3. Nối các bảng trong hai cơ sở dữ liệu bằng SQLAlchemy

  4. So sánh điểm tương đồng giữa hai tập kết quả

  5. làm thế nào để điền giá trị cột mysql dựa trên một công thức?