Wie gruppiere ich Ergebnisse mit Eloquent?

8

Ich habe schon seit einiger Zeit versucht, das herauszufinden, und kann es einfach nicht funktionieren lassen. Ich habe eine Tabelle, die ähnlich aussieht.

Tabelle: Probleme

%Vor%

Mein Problem ist, dass ich es sortieren muss (einfach!), aber ich möchte nur eines von jedem Magazin (Spalte magazine_id) bekommen.

Meine Eloquente Abfrage ist ab sofort:

%Vor%

Ich dachte, das Hinzufügen von groupBy('magazine_id') würde helfen, aber es scheint, als ob es mir nur teilweise hilft. Die Ergebnisse sind nicht in der richtigen Reihenfolge. Meine Frage ist also - gibt es einen einfachen Weg?

Ich habe mit verschiedenen Antworten auf ähnliche Fragen experimentiert, aber ich versage es vollständig.

Abrufen des letzten Datensatzes in jeder Gruppe

oder

So erhalten Sie das Neueste Aufnahme in jeder Gruppe mit GROUP BY?

Weitere Hilfe würde sehr geschätzt werden.

BEARBEITEN: Am nächsten bin ich derzeit:

%Vor%

Allerdings gibt es mir nicht das gewünschte Ergebnis.

    
Andreas 10.08.2013, 06:57
quelle

3 Antworten

13

Sie müssen eine MAX -Funktion in der SELECT -Klausel für jede zu bestellende Spalte in DESC ending order hinzufügen. Die Umkehrung gilt für Spalten, die in ASC Endreihenfolge angeordnet sind. Sie müssen MIN function in der SELECT -Klausel hinzufügen.

Ihre Eloquent-Abfrage muss eine rohe -Auswahl enthalten:

%Vor%

Der einzige Nachteil besteht darin, dass Sie jede Spalte angeben müssen, die Sie abrufen möchten. Und verwenden Sie nicht den * Selektor, er überschreibt die Aggregatfunktion in der select-Klausel.

Aktualisieren : Es scheint so, als würde man den * Selektor vor hinzufügen, um die Aggregatfunktionen in der SELECT -Klausel zu verwenden. Dies bedeutet, dass Sie die rohe Auswahl wie folgt umschreiben:

%Vor%

Ich denke, wenn man den Selektor * vorher setzt, werden die Aggregatfunktionen von ihren Spalten überschrieben.

    
Rubens Mariuzzo 10.08.2013, 22:03
quelle
3

Ich war auf der Suche nach einer Möglichkeit, die Ergebnisse vor der Gruppierung zu ordnen, und diese Antwort tauchte immer wieder auf. In meinem Fall war es für den Posteingang eines Benutzers. Ich musste die letzte Nachricht anzeigen, die der Benutzer in jedem Nachrichten-Thread erhalten hat, zu dem er gehört hat. Mein Tisch sieht so aus:

%Vor%

Die akzeptierte Antwort zu dieser Frage gruppiert die Ergebnisse und sortiert sie dann. Ich musste die Ergebnisse nach dem Feld created_at absteigend sortieren, bevor ich sie gruppierte, damit ich die neueste Nachricht von jedem Thread bekam. Wie auch immer, hier war meine endgültige Lösung nach viel Graben:

%Vor%

Dies erstellt die folgende Abfrage:

%Vor%     
Willem Ellis 10.09.2014 19:31
quelle
0

In MySQL können Sie so etwas tun:

%Vor%

In eloquent würden Sie so etwas tun: - & gt; groupBy ('field', 'desc'), jedoch scheint die groupBy nicht eine Option zu sein, die ebenso aussagekräftig ist wie order by is.

Kann eine Instanz sein, in der Sie eine rohe Abfrage oder möglicherweise die max-Funktion verwenden müssen.

Wade

    
Wade 23.03.2015 17:16
quelle

Tags und Links