[MySQL,PHP] Frage zu Group by

Hallo,

ich habe mal ne kleine Frage:
Wenn ich die Einträge aus einer Spalte sortieren und gruppieren will nutze ich group by, soweit kein Problem.

Nun möchte ich aber das ein Eintrag, indem mehrere Werte stehen auch unter mehreren Gruppen sortiert haben.

Konkretes Beispiel damit es vielleicht einfacher zu Verstehen wird:
Ich baue eine Musikdatenbank auf und schreibe in die Spalte „genre“ das Genre des Songs.
Wenn ich bei einem Song „Pop, Rock“ eintrage, möchte ich, dass dieser bei Pop und bei Rock erscheint und nicht extra als „Pop, Rock“ gelistet wird.

Vielen Dank schonmal
lg
IceDragon

Moin, IceDragon,

Nun möchte ich aber das ein Eintrag, indem mehrere Werte
stehen auch unter mehreren Gruppen sortiert haben.

das geht nicht, weil der Group by nur auf Spalten abzielt. Dass in einer Spalte mehrere Werte abgelegt sind, ist ein Kunstfehler und der Funktion nicht beizubringen.

Technisch ausgedrückt: Das Datenmodell ist Murx, hier liegt ein Verstoß gegen die 1. Normalform vor.

Gruß Ralf

Hallo,

danke erstmal. Damit habe ich gerechnet^^

Gibt es denn eine andere halbwegs elegante Lösung für das Problem? Stehe im Moment etwas auf dem Schlauch.

lg
IceDragon

Moin, IceDragon,

Gibt es denn eine andere halbwegs elegante Lösung für das
Problem?

was heißt hier elegant? Per SQl geht da gar nichts, wenn Du das Datenmodell nicht korrigieren möchtest.

Eine Softwarelösung hieße, die Tabelle sortiert in den Speicher zu lesen, die Spalte in zwei Felder aufzutrennen und den Group by von Hand zu Fuß nachzubilden. Elegant ist was anderes.

Gruß Ralf

Korrektur 1.NF
Hi IceDragon,

hier liegt ein Verstoß gegen die 1. Normalform vor.

das ist natürlich Quark. Die 1. NF verbietet Vektoren zu einem Schlüssel, in Deinem Beispiel die Spalten Genre1, Genre2, … usw. Wenn eine Spalte Text enthält, der mehrere Informationen trägt, weiß kein SQL davon etwas und kann deshalb nichts damit anfangen - schlicht Murx, ohne besonderen Namen.

Gruß Ralf

Hi!

Ralf hat ja schon das Datenmodell zerhauen, nun biegen wir es wieder zusammen:

Aus dem Genre machst Du eine eigene Tabelle und dazu noch eine weitere Tabelle, in der Du Genre mit den Songs verknüpft (also eine klassische Auflösung einer n:m-Beziehung), das Ganze sieht dann datentechnisch ungefähr so aus:

Songs Songs\_Genre Genre
SONG\_ID SONG\_ID GENRE\_ID
TITEL GENRE\_ID BEZEICHNUNG
... ... ....

Grüße,
Tomh