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

Ngôn ngữ truy vấn Doctrine nhận Hàng tối đa / Mới nhất cho mỗi nhóm

Truy vấn bạn đang cố gắng thực hiện với học thuyết có liên quan đến . Để sử dụng một truy vấn phụ và sau đó kết hợp với truy vấn chính, hãy xử lý mọi thứ phức tạp với học thuyết. Vì vậy, dưới đây là phiên bản SQL được viết lại để có được kết quả tương tự mà không cần sử dụng bất kỳ hàm tổng hợp nào:

SELECT 
  a.* 
FROM
  score a 
  LEFT JOIN score b 
    ON a.name = b.name 
    AND a.score < b.score 
WHERE b.score IS NULL 
ORDER BY a.score DESC 

DEMO

Để chuyển đổi truy vấn trên tương đương với học thuyết hoặc DQL rất dễ dàng, dưới đây là phiên bản DQL của SQL trên:

SELECT a 
FROM AppBundle\Entity\Score a
    LEFT JOIN AppBundle\Entity\Score b 
    WITH a.name = b.name 
    AND a.score < b.score
WHERE b.score IS NULL
ORDER BY a.score DESC

Hoặc với trình tạo truy vấn, bạn có thể viết một cái gì đó giống như tôi đã thử nghiệm bên dưới với symfony 2.8 bằng cách sử dụng Lược đồ DEMO

$DM   = $this->get( 'Doctrine' )->getManager();
$repo = $DM->getRepository( 'AppBundle\Entity\Score' );
$results = $repo->createQueryBuilder( 'a' )
                ->select( 'a' )
                ->leftJoin(
                    'AppBundle\Entity\Score',
                    'b',
                    'WITH',
                    'a.name = b.name AND a.score < b.score'
                )
                ->where( 'b.score IS NULL' )
                ->orderBy( 'a.score','DESC' )
                ->getQuery()
                ->getResult();

Một ý tưởng khác là tạo một khung nhìn bằng cách sử dụng truy vấn của bạn trong cơ sở dữ liệu và trong symfony, hãy tạo một thực thể đặt tên khung nhìn trong chú thích bảng và chỉ cần bắt đầu gọi thực thể của bạn, nó sẽ cho kết quả trả về bởi truy vấn của bạn nhưng cách làm này không được khuyến khích chỉ là một cách khắc phục tạm thời .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. nhiều truy vấn cùng một bảng nhưng ở các cột khác nhau mysql

  2. Cách kết nối với MySQL bằng Node.js

  3. Cách tách một chuỗi trong MySQL

  4. Làm cách nào để chèn tệp BLOB và CLOB trong MySQL?

  5. Làm thế nào để biết MySQLnd có phải là trình điều khiển đang hoạt động hay không?