2013-04-24 7 views
13

Ich möchte alles + MAX-Wert auswählen und nur Zeilen mit maximalen Werten erhalten.Doctrine Abfrage Gebäude wählen 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(); 

Wie konnte ich dies in der Lehre erreichen? Ich bekomme einen Fehler, dass * Eigenschaft nicht gefunden wird. Ich habe versucht, sie alle einzeln auszuwählen, aber auch kein Glück.

Tor ist so etwas wie dieses

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

Bitte helfen Sie zu erreichen;)

+1

DQL =/= SQL, nicht sicher, was Sie versuchen, hier zu tun. select ('s, ...) sollte ausreichen. – mpm

+0

Dies wird mich nur max_score und nicht meine gesamte Entität auswählen .. Ich versuche, alle einzigartigen höchsten Punktzahlen für Benutzer zu erhalten. – rat4m3n

+1

Wählen Sie einfach ('s, MAX (s.Score)') wie @mpm vorgeschlagen. –

Antwort

18

Hier eine abschließende Bearbeitung Abfrage dies für die Datensätze

$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

Bitte markieren sie als eine Antwort, auch wo bekommst du $ limit? –

12

Es ist zu spät, aber ich schreibe .

Sie können "wie HIDDEN" in SELECT-Anweisungen verwenden, um ein Feld des Endergebnisses zu entfernen, damit Sie es zum Ordnen oder Gruppieren verwenden können, ohne Ergebnisfelder zu ändern.

In Ihrem Beispiel:

$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');