Doctrine – IF-Abfrage in ORDERBY

Das Problem: es gibt in der Datenbank im Feld ranking eine Rangliste nach der einzelne Einträge sortiert werden sollen. Allerdings soll das die Reihenfolge aufsteigend sein (also ORDER BY ranking ASC), ausgenommen die Zeilen, die NULL sind. Die sollen als letztes kommen.

Was ich nun eigentlich erreichen möchte ist eine Query dieser Art:

SELECT * FROM table ORDER BY IF(ranking IS NULL, 9999, ranking) ASC

Ich habe nun auf alle mögliche Arten versucht, das mit Doctrine hinzubekommen, es ist aber immer fehlgeschlagen. Bis mir dieser freundliche Tipp gegeben wurde. Anscheinend kann Doctrine kein IF in OrderBy (wieso auch? ….), was es allerdings kann ist ein CASE WHEN im Select, das man dann im OrderBy referenzieren kann.

$query = $this
            ->createQueryBuilder( 'a' )
            ->select('a') 
            ->add('from', 'path\to\whatever\table a')
            ->addSelect('CASE WHEN a.ranking IS NULL THEN 9999 ELSE a.ranking END as HIDDEN ORD')
            ->where( 'a.deleted IS NULL' )
            ->orderBy(  'ORD', 'asc' )
            ->getQuery()
            ;        

Und damit gehts! YAY!

Btw: doctrine is total bescheuert.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.