Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Vernünftige Sortierung, trotz Group By Statement

Empfohlene Antworten

Veröffentlicht

Hallo Leute,

ich habe eine großes Problem mit der sortierung der Ausgabe. Ich habe etwas gegoogelt und gefunden, das es am GROUP BY-Statement liegen müsste. Allerdings habe ich keine Lösung dazu gefunden. Vielleicht könnt ihr mir helfen.

SQL Befehl


SELECT Sammlung.ID, Sammlung.Editionenen_ID
FROM Sammlung, Editionenen, Alben, InterpretenAlben, Interpreten
WHERE Sammlung.User_ID = $User_ID
AND Sammlung.Editionenen_ID = Editionen.ID
AND Alben.ID = Editionen.Alben_ID
AND Alben.ID = InterpretenAlben.Alben_ID
AND InterpretenAlben.Interpreten_ID = Interpreten.ID
GROUP BY Sammlung.Editionenen_ID
ORDER BY Interpreten.Name, Alben.ReleaseYear
[/PHP]

Wenn ihr die Datenbank dazu braucht, müsst ihr bescheid geben ;)

Das Problem ist, dass das Order By Statement komplett ignoriert wird. Es sei noch dazu gesagt, das es sich hierbei um MySQL handelt.

Habt ihr vielleicht eine Idee? Danke im vorraus.

Gruß

Bearbeitet von Metaller
Information hinzugefügt

Hi,

typisch mysql. Die GROUP BY Klausel ist falsch, mysql meldet das aber nicht. Jedes Feld, dass im SELECT nicht in einer Aggregatsfunktion (COUNT,MAX,MIN,SUM etc)hinterlegt wird, muss in die GROUP BY Klausel. Jede andere DB würde dein Statement nicht ausführen.

Dim

  • Autor

Hallo,

danke für deine Antwort. Jetzt wird zumindest schon einmal sortiert. Nur leider nicht richtig. Das Problem ist, wenn ein Album, mehr als einen Interpreten hat (Split Alben), dann passt das leider nicht. Wenn ich alle Alben rausfilter, die mehr als einen Interpreten haben, funktionierts.

Vielleicht dafür auch noch einen Lösungsvorschlag? Oder benötigst du mehr Informationen dazu?

Gruß

  • Autor

Aktueller SQL:


SELECT Sammlung.ID, Sammlung.Editionenen_ID
FROM Sammlung, Editionenen, Alben, InterpretenAlben, Interpreten
WHERE Sammlung.User_ID = $User_ID
AND Sammlung.Editionenen_ID = Editionen.ID
AND Alben.ID = Editionen.Alben_ID
AND Alben.ID = InterpretenAlben.Alben_ID
AND InterpretenAlben.Interpreten_ID = Interpreten.ID
GROUP BY Sammlung.Editionenen_ID, Sammlung.ID
ORDER BY Interpreten.Name, Alben.ReleaseYear
[/PHP]

Die Sortierung soll in etwa so aussehen (sind jetzt Beispiele, was mir gerade spontan einfällt):

[code]Cannibal Corpse; Metallica; Rammstein Disbelief; Gorgoroth Gorgoroth Hackneyed Frei.Wild; Saltatio Mortis[/code]
Aber leider sieht die Ausgabe so aktuell aus:
[code]Frei.Wild; Saltatio Mortis Disbelief; Gorgoroth Gorgoroth Hackneyed Cannibal Corpse; Metallica; Rammstein[/code]

Wenn ich Alben mit mehr als einem Interpreten rausfilter, passt es. Halt nur ohne die Alben mit mehreren Interpreten.

Aktuell regel ich das noch über einen zweiten SQL, was ich leider auch ungern mache. Aber so war es erstmal einfacher, die Alben mit doppelten Interpret zusammengefasst auszugeben.

[PHP]
SELECT Interpreten.ID, Interpreten.Name
FROM Interpreten, InterpretenAlben, Editionen
WHERE Editionen.ID = $row->Editionenen_ID
AND Editionen.Alben_ID = InterpretenAlben.Alben_ID
AND Interpreten.ID = InterpretenAlben.Interpreten_ID
ORDER BY Interpreten.Name

Dein SQL liefert sicherlich nicht die Ausgabe, die Du gepostet hast. Du selektierts eine ID und Edition_ID postest aber mit Semikolon getrennte Bandnamen?

Aber wenn man sich das oft genug durchließt, kommt man irgendwie drauf, was Du haben möchtest und was du momentan machst.

Du möchtest nicht nur Sortieren, sondern auch Pivotieren (und nicht gruppieren) und zwar innerhalb einer Sammlung alle Alben in einer Zeile alphabetisch. Ich weiß nicht, ob das in mysql per Befehl möglich ist, dazu kenne ich die DB zu wenig.

Dim

  • Autor

Ah, die Ausgabe kommt im Zusammenhang mit dem 2. SQL Befehl.

Also ein gewollte Ausgabe ist (jetzt nur mit einem Bandnamen):

+ AC/DC

- Back in Black

- The Razors Edge

+ Judas Priest

- Jugulator

+ Metallica

- Master of Puppets

- St. Anger

Was benötigst du denn für Informationen? Meinst du, du weißt nicht wie meine Datenbank aufgebaut ist oder weißt kennst du allgemein MySQL nicht gut genug?

Hi,

so eine Ausgabe würde ich in zwei Schritten realisieren.

Zum einen die betreffenden Bandnamen sotiert selektieren und anschließend pro Bandname die zugehörigen Alben ebenfalls sortiert selektieren.

D.h. du hast zwei Schleifen: Eine äußere über die Bandnamen und die innere über die zugehörigen Alben.

Dim

  • Autor

Aktuell ist es so aufgebaut:

- Sammlung nach Interpreten sortieren (Rückgabe der Alben_ID)

- Mit der Alben_ID die Interpreten finden und sortieren

- Und dann, alle Alben ausgeben, die in der Sammlung sind und diese Interpreten haben

Und bei den ersten beiden gibt es halt die Sortierungsprobleme, die ich oben angesprochen habe ;)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.