PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : problem mit php-script / mySQL- Datenbank


Hotschi
06.06.2002, 23:40
Hallo

Ich bin gerade dabei, eine Homepage zu basteln, die an eine mySQL- Datenbank angebunden sein soll, die verschiedene Daten zu Liedern und Alben enthält.
Und zwar habe ich eine Tabelle mit den Liedern (haben jeweils eine id) und eine mit Alben (haben auch id).
Jetzt möchte alle Lieder anzeigen lassen, die auf einem bestimmtel Album sind.


$sql2 = "select * FROM songs WHERE song_id = '1' OR song_id = '2' ";


In dem Beispiel werden die Lieder mit den ids 1 und zwei ausgelesen.
Ich möchte es aber so haben, dass die jeweiligen Lieder ids in der Tabelle der Alben gespeichert werden.

Wie kann ich das machen? Wie muss die Tabelle aussehen, und wie die sql Abfrage?

Ich komme an der Stelle nicht mehr weiter, hoffentlich kann mir jemand von euch helfen!

Danke schonmal&Gruß
Hotschi


Jan Krüger
07.06.2002, 01:04
ich würde eine weitere tabelle empfehlen.

table alben2songs:
album_id bigint not null
song_id bigint not null
primary key (album_id, song_id)

für jeden songs machst du einen eintrag in diese tabelle, und zwar die album-id in "album_id" und die song-id in "song_id".

jetzt kannst du die songs von einem bestimmten album mit folgender abfrage holen:

select * from songs s, alben2songs as where s.song_id = as.song_id AND as.album_id = 12345;

Hotschi
07.06.2002, 10:31
hallo

vielen dank für deine bemühungen.

ich habe es gerade selbst gelöst, jedoch auf eine etwas andere art.
das problem (ich habe es oben nicht angeführ) war, dass ein song auf 2 alben sein kann. dies habe ich mit kommaabtrennung und explode gelöst.

ich kopiere einfach mal den auszug aus meinem code...


$sql3 = "select tracks from stuff WHERE id = '$id'";
$result3 = mysql_query($sql3);

while ($row3 = mysql_fetch_array($result3, MYSQL_ASSOC)) $tracks = $row3[tracks];

$track_array = explode (",", $tracks);

$sql2 = "select * FROM songs WHERE song_id = '$track_array[0]'";

for ($i = 1; $i < count($track_array); $i++) $sql2 .= " OR song_id = '$track_array[$i]'";

$result2 = mysql_query($sql2);


das heisst in der alben- tabelle (hier "stuff", weil es nicht nur alben, sondern auch singles und videos gibt...) sind die verseise zu den einzelnen tracks gespeichert.

das funktioniert, könntest du mir aber bitte noch erklären, was genau deine "select" zeile bedeutet? ist mein code umständlich?

vielen dank!

Gruß
Christoph

Hotschi
07.06.2002, 18:31
hallo

gerade habe ich festgestellt, dass mein code doch nicht so gut ist, weil die sortierung aufgehoben wird.

weiss jemand, was ich falsch gemacht habe?

thx
cu´s
hotschi