2017-01-05 1 views
0

Betrachten Sie diese Tabelle:Change Group Auftrags

id | machine | manual| etc. 
1  1   0 
2  2   0 
3  1   1 

ich von Machine die Datensätze gruppiert abrufen möchten. Ich weiß, dass die manuellen Datensätze immer nach den automatischen eingefügt werden. In MySQL Ich kann dies tun:

SELECT * FROM table GROUP BY machine DESC 

Und die abgerufenen Datensätze sind:

id | machine | manual| etc. 
2  2   0 
3  1   1 

Da die GROUP BY von MySQL in ASC arbeitet und der erste Datensatz es findet, ist das man es hält. Also, indem ich die DESC in die GROUP BY stelle, funktioniert sie umgekehrt und da ich weiß, dass die Handbücher immer danach kommen, würde dies für meine Lösung funktionieren. Aber wie kann ich das in Doctrine machen?

$qb = Query Builder 'b' 
$qb->groupBy('b.machine DESC'); 

Kann jemand das ohne Unterabfragen tun? Danke

+0

versuchen Sie mit 'orderBy ('b.machine', 'DESC');' –

+0

@NishantNair die Reihenfolge von gilt nach der Gruppe von ist getan, damit es mein Problem nicht löst. – Danubio

Antwort

0

Ihre Lösung mit group by ist gegen den SQL-Standard und funktioniert möglicherweise nicht, wenn nur vollständige Gruppe nach SQL-Modus in MySQL konfiguriert ist. Dies ist die Standardeinstellung der neuesten Versionen von MySQL.

Da Sie die aktuelle Datensatz durch eine Autoinkrement-ID identifiziert möchten, können Sie das erwartete Ergebnis mit einem selbst erreichen left join:

select t1.* 
from table t1 
left join table t2 on t1.machine=t2.machine and t1.id<t2.id 
where t2.id is null 

Grundsätzlich mit der t1.id<t2.id Joinbedingung Sie alle Datensätze, wo t2.id ist größer für die gleiche Maschine. Wenn eine größere t2.id nicht gefunden wird, wird ein null Wert zurückgegeben - dies zeigt an, dass dies der neueste Datensatz für die angegebene Maschine ist. Dies ist der Datensatz, den wir mit der Klausel aufbewahren.

+0

Ich habe bereits eine Lösung, wenn das, was ich angefordert habe, nicht getan werden kann. Vielen Dank :) – Danubio

Verwandte Themen