Verwenden von union und order by in mysql
Möchte ich nutzen, um mit der union in der mysql-Abfrage.
Ich bin abrufen verschiedene Arten von Datensatz basierend auf verschiedenen Kriterien aus einer Tabelle, basierend auf der Entfernung für eine Suche auf meiner Website.
Die erste select-Abfrage Daten in Bezug auf die genaue Stelle Suche .
Die 2. select-Abfrage liefert Daten zu Entfernung, innerhalb 5 km von dem Ort gesucht.
Die 3. wählen Sie Abfrage von Daten im Zusammenhang mit der Entfernung innerhalb von 5-15 km aus dem Ort gesucht.
Dann habe ich m mit union Zusammenführen aller Ergebnisse und zeigen auf eine Seite mit Blättern. Unter der entsprechenden überschrift als 'Genaue Suche Ergebnisse"Ergebnisse innerhalb 5 kms' etc
Möchte ich nun Sortieren Sie Ergebnisse auf Basis der id oder add_date. Aber wenn ich order by-Klausel am Ende meiner Abfrage ( Abfrage1 union union Abfrage 2 Abfrage 3 order by add_date). Es sortiert alle Ergebnisse. Aber was ich will, ist es Sortieren soll, die unter jeder überschrift.
InformationsquelleAutor der Frage Aditya | 2010-08-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie tun dies durch hinzufügen eines pseudo-Spalte mit dem Rang zu jeder auswählen, die Sie Sortieren können, indem Sie zuerst, vor der Sortierung durch Ihre andere Kriterien, z.B.:
InformationsquelleAutor der Antwort RedFilter
Können Sie Unterabfragen, dies zu tun:
InformationsquelleAutor der Antwort rickythefox
InformationsquelleAutor der Antwort Mitali
Vergessen Sie nicht, die union all ist eine Möglichkeit zum hinzufügen von Datensätzen um einen Datensatz ohne Sortierung oder eine Verschmelzung (im Gegensatz zu union).
So zum Beispiel:
Hält es die einzelnen Abfragen übersichtlicher und erlaubt Ihnen das Sortieren von verschiedenen Parametern, die in jeder Abfrage. Jedoch durch die Verwendung der ausgewählten Antwort, wie es vielleicht klarer geworden, je nach Komplexität und in welcher Beziehung die Daten, weil Sie die Konzeption der Sortierung. Es erlaubt Ihnen auch, um die Rückkehr der künstlichen Spalte Abfragen-Programm, so hat es einen Zusammenhang kann es Sortieren oder organisieren.
Aber dieser Weg hat den Vorteil, dass Sie schnell, nicht die Einführung von zusätzlichen Variablen, und macht es einfach zu trennen, jede Abfrage mit der Sortierung. Die Möglichkeit zum hinzufügen einer Grenze ist einfach ein extra-bonus.
- Und natürlich fühlen Sie sich frei, drehen Sie die union in eine union, und fügen Sie eine Art für die gesamte Abfrage. Oder fügen Sie eine künstliche id, in diesem Fall auf diese Weise macht es einfach zu Sortieren nach verschiedenen Parametern, die in jeder Abfrage, aber es ist ansonsten die gleiche wie die akzeptierte Antwort.
InformationsquelleAutor der Antwort Gerard ONeill
Einer union-Abfrage kann nur eine master -
ORDER BY
Klausel, IIRC. Um dies zu erhalten, die in jeder Abfrage, die die größereUNION
Abfrage, fügen Sie ein Feld, das werden ein Feld, das Sie Sortieren, indem Sie für dieUNION
'sORDER BY
.Zum Beispiel, haben Sie vielleicht so etwas wie
Dass
union_sort
Feld können Sie alles, was Sie Sortieren möchten. In diesem Beispiel, es passiert einfach zu setzen Ergebnisse aus der ersten Tabelle, erste, zweite Tabelle zweite, usw.InformationsquelleAutor der Antwort user151841
Habe ich diese Arbeit auf eine join-plus union.
InformationsquelleAutor der Antwort Robert Saylor
Versuchen:
Where [ABFRAGE 1] und [ABFRAGE 2] sind deine beiden Abfragen aus, die Sie Zusammenführen möchten.
InformationsquelleAutor der Antwort André Hoffmann
Dies ist, weil Sie die Sortierung gesamte result-set, Sie Sortieren soll, jeden Teil der union getrennt, oder Sie können Sie verwenden, UM DURCH die (Etwas ie. Unterabfrage Abstand), DANN (etwas ie Zeilen-id) - Klausel
InformationsquelleAutor der Antwort canni
Habe ich versucht, indem Sie die Reihenfolge, indem jeweils die Abfragen vor unioning wie
aber es schien nicht zu funktionieren. Es hat eigentlich nicht tun, die Reihenfolge innerhalb der Zeilen jeder wählen Sie.
Ich denke, Sie müssen halten Sie die Reihenfolge, indem Sie auf der Außenseite und fügen Sie die Spalten in der where-Klausel die order by -, so etwas wie
Dies kann ein wenig trickreich sein, da Sie gruppieren möchten reicht, aber ich denke, es sollte machbar sein.
InformationsquelleAutor der Antwort Mike C