Wie kann ich es so machen, dass ‘orderBy()’ für jeden einzeln gilt und dann die Ergebnisse wieder zusammenführen? Es scheint, als sollte es funktionieren.
BEARBEITEN: Wenn jemand eine Möglichkeit dazu bieten kann, auch wenn es sich um normales MySQL handelt, werde ich Ihre als Antwort auswählen, da ich denke, dass Eloquent möglicherweise einen Fehler aufweist.
Warum es „nicht geht“. Was ist der Fehler oder die Ausgabe
– Gayan
20. Januar 2017 um 5:06 Uhr
Es gibt keinen Fehler. Es scheint einfach nicht die orderBy-Sortierung anzuwenden.
– Howard
20. Januar 2017 um 5:07 Uhr
Es ist keine Eloquent-Sache, es ist eine MySQL-Sache. Siehe „Followup“ in der akzeptierten Antwort hier: stackoverflow.com/questions/24683766/…. Grundsätzlich gilt: ORDER BY wird in UNIONs nicht berücksichtigt und kann sogar von der MySQL-Version abhängig sein.
Aber falls beide Tabellen unterschiedliche Spaltenzahlen haben, gibt es einen Fehler. Gibt es eine Möglichkeit, UNION in Eloquent mit diff-Spaltentabellen zu verwenden?
– Sunil Paclangia
20. Dezember 2019 um 15:29 Uhr
@Sunil Für mich ist es unmöglich, eine unterschiedliche Anzahl von Spalten zu vereinen. es sei denn, Sie fügen ausgewählte Verbündete mit Nullwert hinzu.
– AbingPj
20. August 2020 um 9:46 Uhr
Jede SELECT-Anweisung innerhalb von UNION muss die gleiche Anzahl von Spalten haben. Die Spalten müssen auch ähnliche Datentypen haben. Die Spalten in jeder SELECT-Anweisung müssen ebenfalls in derselben Reihenfolge sein.
– Fahad Scheich
18. Februar 2021 um 18:45 Uhr
Jaymin Panchal
Versuchen Sie einfach, sich zu bewerben orderBy() nach union()
Ich möchte nicht, dass es als Ganzes bestellt wird. Ich möchte, dass die einzelnen Abfragen in sich geordnet werden.
– Howard
20. Januar 2017 um 5:12 Uhr
können Sie das Ergebnis ohne Union und mit Union posten, um mehr über die Probleme zu erfahren
– Jaymin Panchal
20. Januar 2017 um 5:21 Uhr
Es wäre schwierig, weil ich die Abfrage für die Frage vereinfacht habe. Grundsätzlich findet keine Sortierung statt, wenn ich zuerst orderBy() und dann union verwende. Wenn ich sie einzeln mache, funktioniert orderBy() einwandfrei. Wenn ich es auf der Grundlage der von Ihnen geposteten Antwort mache, geschieht orderBy() als Ganzes.
– Howard
20. Januar 2017 um 5:29 Uhr
Ich denke, das könnte ein Laravel-Bug sein. Ich habe den Fehler auf github gepostet. Hoffentlich wird es bald gelöst.
– Howard
20. Januar 2017 um 5:42 Uhr
@PrafullaKumarSahu Überprüfe jetzt.
– Howard
20. Januar 2017 um 5:48 Uhr
Der “verschmelzen” Funktion in der Laravel-Sammlung kann Ihnen möglicherweise helfen.
Der große Unterschied ist, dass ich die Abfrage vorher mit ->get() abschließe und merge() statt union() verwende.
Hinweis: Ich habe Ihre Daten nicht, daher kann ich nicht beweisen, dass es funktioniert, aber es funktioniert zumindest mit meinen Daten, also sollte es einen Versuch wert sein
Ich habe ->get(); bis zum Ende Ihrer Beispiele $a und $b. Die Lösung, die Sie bereitgestellt haben, funktioniert, erfordert jedoch das Aufrufen der Datenbank für jede einzelne, was ich zu vermeiden versuche, da ich mehrere Gewerkschaften benötige, aber dies ist derzeit die beste Antwort.
– Howard
20. Januar 2017 um 23:14 Uhr
Es funktioniert nicht, wenn das zusammengeführte Ergebnis mit der richtigen Sortierreihenfolge paginiert werden muss
– Alexey Tsinya
25. Oktober 2018 um 15:53 Uhr
Ich habe dies getan, um mit datatable result $a->union($b)->get(); [Add get(); after union is applied]
Warum es „nicht geht“. Was ist der Fehler oder die Ausgabe
– Gayan
20. Januar 2017 um 5:06 Uhr
Es gibt keinen Fehler. Es scheint einfach nicht die orderBy-Sortierung anzuwenden.
– Howard
20. Januar 2017 um 5:07 Uhr
Es ist keine Eloquent-Sache, es ist eine MySQL-Sache. Siehe „Followup“ in der akzeptierten Antwort hier: stackoverflow.com/questions/24683766/…. Grundsätzlich gilt: ORDER BY wird in UNIONs nicht berücksichtigt und kann sogar von der MySQL-Version abhängig sein.
– zmippie
12. April 2017 um 9:12 Uhr