[MySQL] Abfrage gleicher Inhalte ignorieren

T-Flow

Scheidenpilz!
ID: 16924
L
24 August 2006
10.107
434
Hallo liebe Progger,

ich hätte da mal eine kleine Frage, da meine PHP/MySQL Kentnisse in den letzten Jahren nachgelassen haben.

Ich habe eine MySQL-Tabelle mit 7 Spalten (id, interpret, titel, style, usw...). Da bei der Spalte Style aber in jeder Zeile immer nur einer der festgelegten Genres drinstehen wie z.B. "House", "Electro", "Trance", "Black", "Schlager", usw... finde ich den/die Befehl(e) nicht, das schön sortiert und immer nur 1 Eintrag auszugeben.

Für meine Suchmaske möchte ich nämlich ein "Select-Aufklappmenü" erstellen, in dem mein Script alle vorhandenen Styles jedoch nur einmal einträgt...

Alles verstanden, oder hab ich mich (mal wieder) net deutlich formuliert? *g*

Grüßle, Tobi
 
Wenn du ein richtig schönes Datenbankdesign haben möchtest gliederst du die Styles aus in eine eigene Tabelle. In der Liste mit den Tracks wird dann nur noch die StyleID aus der Style-Tabelle gespeichert. Dann tust du dir auch einfacher mit dem Selektieren der unterschiedlichen Styles =). Dasselbe gilt übrigens für die Interpreten.

Nur als Anregung am Rande - wo die Lösung hier sowieso schon steht ;o). Weitere Infos dazu: https://de.wikipedia.org/wiki/Foreign_Key#Fremdschl.C3.BCssel
 
was du ansprichst ist die 2. Normalform und keine Fremdschlüssel.
Er wird aber trotzdem das gleiche "Problem" haben, zumal normalisierte Tabellen schwerer zu handeln und auf Grund der vielen benötigten Joins langsamer sind.
 
Dankedanke,

jetzt hab ichs, dank ice-breaker :eek:) Die Variante hab ich nämlich zuerst probiert...

Übrigens will ich kein schönes Datenbank-Design, da ich eh nur eine Tabelle brauche (hab die vorher per PHP aus einer CSV-Datei ausgelesen).
 
*grml*, hatte es so verstanden, dass du immer einen Track pro Style ausgeben lassen willst ... Wenn ich jetzt schon rumprobiert hab, hier meine Lösung (vielleicht brauchst´s ja mal *g*) :ugly:

Code:
SELECT *
FROM (

SELECT *
FROM interpreten
ORDER BY RAND( )
) AS interpreten_sub
GROUP BY (
style
)

-- das SELECT * war nur kurz auf die Schnelle ;)
 
Lass uns nicht über den Sinn von Normalisierung reden - egal ob schwerer zu handhaben oder nicht: Normalisierung ist gerade in größeren Datenbanken wichtig. Und spätestens wenn du die Styles in mehreren Tabellen benötigst und dann auswerten möchtest, welche Styles es gibt, wirst du sowieso JOINs benötigen.

Im übrigen ist es egal ob ich über Fremdschlüssel oder die Normalisierung rede, denn beides läuft in etwa auf dasselbe hinaus. Die Normalisierung umfasst allerdings noch mehr Regeln, auf die ich nicht eingehen wollte.

Und: Diese Diskussion bringt Tobi keinen Schritt weiter, denn er wollte nur wissen wie er den Select schreiben muss und ich wollte nur noch ergänzend dazu beitragen ;o).

--
Edit

@Tobi: Oki, dann hat sich das eh erledigt ;o). Für eine Tabelle würde ich mir auch nicht den Aufwand machen - sowieso nicht, wenn die Daten aus ner CSV kommt.
 
was du ansprichst ist die 2. Normalform und keine Fremdschlüssel.
Er wird aber trotzdem das gleiche "Problem" haben, zumal normalisierte Tabellen schwerer zu handeln und auf Grund der vielen benötigten Joins langsamer sind.

damit ich auch noch meinen senf dazu gebe:

wenn man genau ist, wirds wohl nicht ein problem der zweiten normalform sein. da er ja eine spalte id hat, ist diese wohl der primary key und somit wäre es dann ein problem der dritten normalform.

jperl
 
@cryptkeeper:
Ich lege die Tabelle sowieso in Excel an, da ich nicht immer über Internet verfüge, wenn ich meine Musiksammlung ausweite usw... sobald ich die neue CSV-Datei einfüge wird die alte Tabelle eh wieder von neuem aufgefüllt :eek:)

@all:
Neue Schwierigkeit für mich: bei der Suche wird immer bei Interpret und Titel nach dem eingegebenen Begriff gesucht. Die Ergebnisse werden (gewollt) immer nach Interpret sortiert ausgegeben. Wenn ich aber z.B. vom Interpret XYZ mehrere Titel habe, wie kann ich den Sortiervorgang bei der Abfrage so kontrollieren, dass er zuerst nach Titel und dann nach Interpret ausgibt?
 
Im übrigen ist es egal ob ich über Fremdschlüssel oder die Normalisierung rede, denn beides läuft in etwa auf dasselbe hinaus. Die Normalisierung umfasst allerdings noch mehr Regeln, auf die ich nicht eingehen wollte.
nein, das sind 2 paar Themen, denn Normalisierung ist eine Art die Daten zu speichern, Fremschlüssel muss eine Datenbank unterstützen, und MyIsam unterstützt es nicht, also ist das dann keine Notmalisierung?
Ich gebe dir natürlich Recht das die Normalisierung gut ist und auch benötigt wird, aber man sollte eben bendenken, dass sie für hohe Zugriffsraten nicht effizent ist, gab da mal nen Artikel über Sevenload die die Brüche der Normalisierungsregeln in ihrem Projekt beschrieben, um alles effizent lösen zu können.