2013-04-24 33 views
13

Tôi muốn chọn mọi thứ + giá trị MAX và chỉ nhận các hàng có giá trị tối đa.Xây dựng truy vấn giáo lý chọn MAX

$query = $this->createQueryBuilder('s'); 
    $query->where('s.challenge = :challenge')->setParameter('challenge', $challenge); 
    $query->groupBy('s.score'); 
    $query->getQuery(); 

    return $query->select('s.*, MAX(s.score) AS max_score')->getQuery()->getResult(); 

Làm cách nào để đạt được điều này trong học thuyết? Tôi nhận được lỗi rằng * không tìm thấy thuộc tính. Tôi đã cố gắng chọn tất cả từng cái một nhưng không may mắn.

Mục tiêu là để đạt được một cái gì đó như thế này

SELECT user, challenge, whateverelse, MAX(score) FROM users_scores_table GROUP BY user_id 

Xin giúp;)

+1

DQL =/= SQL, không chắc chắn những gì bạn đang cố gắng làm ở đây. chọn ('s, ...) là đủ. – mpm

+0

Điều này sẽ chỉ chọn tôi tối đa và không phải toàn bộ tổ chức của tôi .. Tôi đang cố gắng nhận được tất cả điểm số cao nhất duy nhất cho người dùng. – rat4m3n

+1

Chỉ cần chọn ('s, MAX (s.score)') như @mpm được đề xuất. –

Trả lời

18

Đây là một truy vấn làm việc cuối cùng

$query = $this->createQueryBuilder('s'); 
    $query->select('s, MAX(s.score) AS max_score'); 
    $query->where('s.challenge = :challenge')->setParameter('challenge', $challenge); 
    $query->groupBy('s.user'); 
    $query->setMaxResults($limit); 
    $query->orderBy('max_score', 'DESC'); 

    return $query->getQuery()->getResult(); 
+0

Hãy đánh dấu nó là một câu trả lời, bạn cũng nhận được giới hạn $ ở đâu? –

12

Đó là quá muộn, nhưng tôi viết những dòng này cho các hồ sơ .

Bạn có thể sử dụng "như HIDDEN" trong câu lệnh SELECT để loại bỏ trường của kết quả cuối cùng, theo cách này bạn có thể sử dụng nó để sắp xếp hoặc nhóm mà không sửa đổi trường kết quả.

Trong ví dụ của bạn:

$query = $this->createQueryBuilder('s'); 
$query->select('s, MAX(s.score) AS HIDDEN max_score'); 
$query->where('s.challenge = :challenge')->setParameter('challenge', $challenge); 
$query->groupBy('s.user'); 
$query->setMaxResults($limit); 
$query->orderBy('max_score', 'DESC'); 
Các vấn đề liên quan