mysql-Abfrage mit Zuordnungstabelle
Verfasst: 01.09.2012 20:12
Hallo Leute,
vermutlich ein Standardproblem, das man sauberer lösen kann, als ich es mache. Mir geht es im folgenden darum, meinen Code zu optimieren und ggf. etwas dazuzulernen.
Also folgendes mysql-Setting: Ich habe eine Tabelle "stuff" in der Informationen über CDs gespeichert sind, eine Tabelle "songs", in der Informationen über Lieder gespeichert sind, und eine Zuordnungstabelle "stuff_nn_songs", in der den CDs die auf ihnen enthaltenen Lieder zugeordnet werden. (CDs können mehrere Lieder haben und Lieder können auf mehreren CDs enthalten sein.)
Erreichen will ich eine Ausgabe im folgenden Stil:
CD1: Lied1, Lied2, Lied3
CD2: Lied4, Lied5, Lied6,
etc.
Dazu habe ich folgende (vermutlich sehr schlechte?) Abfrage geschrieben:
Das Problem an dieser Abfrage scheint mir zu sein, dass ich für jedes Lied eine Zeile zurückbekomme, in der sich die Informationen über die CD immer wiederholen. D.h. mit folgendem Script erhalte ich für das obige Beispiel 6 statt 2 Zeilen.
Jetzt könnte ich die doppelten Zeilen natürlich per rausfiltern, indem ich mit php das Array anders gestalte:
Damit habe ich das Array zwar so, wie ich es haben will, aber das scheint mir eine etwas unsaubere Lösung zu sein, eben weil mysql ja eine Menge Informationen doppelt zurückgibt. Und mit der Schleife überschreibe ich dabei die Variablen, die die Informationen über die CD enthalten ja ab dem zweiten Stück sinnloserweise immer mit denselben Werten.
Weil ich ähnliche Abfragen öfters mal habe, wäre ich für Tipps dankbar, wie man sowas (mit mysql?) besser hinbekommt.
Danke
Christoph
vermutlich ein Standardproblem, das man sauberer lösen kann, als ich es mache. Mir geht es im folgenden darum, meinen Code zu optimieren und ggf. etwas dazuzulernen.
Also folgendes mysql-Setting: Ich habe eine Tabelle "stuff" in der Informationen über CDs gespeichert sind, eine Tabelle "songs", in der Informationen über Lieder gespeichert sind, und eine Zuordnungstabelle "stuff_nn_songs", in der den CDs die auf ihnen enthaltenen Lieder zugeordnet werden. (CDs können mehrere Lieder haben und Lieder können auf mehreren CDs enthalten sein.)
Erreichen will ich eine Ausgabe im folgenden Stil:
CD1: Lied1, Lied2, Lied3
CD2: Lied4, Lied5, Lied6,
etc.
Dazu habe ich folgende (vermutlich sehr schlechte?) Abfrage geschrieben:
Code: Alles auswählen
$sql = "SELECT st.id, st.name, st. release_date, st. releases, st.medium, st.special, st.pic, so.song_name
FROM stuff st
LEFT JOIN stuff_nn_songs nn
ON st.id = nn.stuff_id
LEFT JOIN songs so
ON so.song_id = nn.song_id;"
$result = mysql_query($sql);
Code: Alles auswählen
$i = 0;
while($row = mysql_fetch_array($result))
{
$i++;
$some_array[$i]['name'] = stripslashes($row['name']);
$some_array[$i]['song_name'] = stripslashes($row['song_name']);
$some_array[$i]['release_date'] = stripslashes($row['release_date']);
$some_array[$i]['releases'] = stripslashes($row['releases']);
$some_array[$i]['medium'] = stripslashes($row['medium']);
$some_array[$i]['special'] = stripslashes($row['special']);
$some_array[$i]['pic'] = stripslashes($row['pic']);
}
Code: Alles auswählen
$i = 0;
while($row = mysql_fetch_array($result))
{
$i++;
$some_array[$row['id']]['name'] = stripslashes($row['name']);
$some_array[$row['id']]['song_name'][] = stripslashes($row['song_name']);
$some_array[$row['id']]['release_date'] = stripslashes($row['release_date']);
$some_array[$row['id']]['releases'] = stripslashes($row['releases']);
$some_array[$row['id']]['medium'] = stripslashes($row['medium']);
$some_array[$row['id']]['special'] = stripslashes($row['special']);
$some_array[$row['id']]['pic'] = stripslashes($row['pic']);
}
Weil ich ähnliche Abfragen öfters mal habe, wäre ich für Tipps dankbar, wie man sowas (mit mysql?) besser hinbekommt.
Danke
Christoph