webForumDet fria alternativet

SQL-fråga till flera tabeller.

6 svar · 317 visningar · startad av andsj0

andsj0Medlem sedan aug. 200419 inlägg
#1

Jag behöver hjälp med en sql-fråga till min MySQL-databas.

Tabell 1 album, och tabell 2 songs, har en koppling som heter "albumID"

Det jag vill göra är att hämta alla album och titlar i tabellen album och dess tillhörande låtar i tabellen songs.

här är min fråga till databasen:

$query = "select s.albumid, s.songname, ";
$query .="a.albumid, a.albumname, a.img ";
$query .="from album a inner join songs s on a.albumid = s.albumid";
$result = mysql_query($query) or die("$query");
while ($row = mysql_fetch_object($result)) {

<table><tr>
<td><img src="images/<?=$row->img?>"></td>
<td><?=$row->albumname?><br><?=$row->songname?></td>
</tr></table>

}

Resultat:
Om ett album har 10 låtar listas albumet upp 10 gånger med en låt vid varje album.

Det jag vill är att albumet ska visas 1 gång med dom 10 tillhörande låtarna vid sidan. Jag har provat med "GROUP BY albumid" och då visas bara 1 album men endast den första låten till albumet kommer med.

Hoppas någon kan hjälpa mig.

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Det är inget som man gör med SQL. Hantera det i PHP i stället.

$f = 0;
while ($row = mysql_fetch_object($result)) {
$f++;
if ($f == 1) {
// visa det som bara skall visas en gång
}
//visa det övriga
}
andsj0Medlem sedan aug. 200419 inlägg
#3

Ett stort tack LarsG, men jag tror att jag behöver lite mer hjälp. Jag provade detta och det ser ut att funka, men tabellen album innehåller fler album som jag skulle vilja
visa på sidan med dess tillhörande låtar.

Nu får jag bara 1 träff, endast 1 skiva med tillhörande låtar visas.

LarsGMedlem sedan dec. 200012 464 inlägg
#4

Det är samma princip, bara att hålla reda på när du får ett nytt album.

Du måste hämta posterna så att de är sorterade med avseende på albumname

$query = "select s.albumid, s.songname, ";
$query .="a.albumid, a.albumname, a.img ";
$query .="from album a inner join songs s on a.albumid = s.albumid order by a.albumname";
$albumname = "";

while ($row = mysql_fetch_object($result)) {
if ($albumname != $row["albumname"]) {

// Nu har det kommit ett nytt albumnamn, skriv ut det
$albumname =  $row["albumname"]);
}

//visa det övriga

}
andsj0Medlem sedan aug. 200419 inlägg
#5

Ok, jag förstår nästan hur du menar. Så här ser min kod ut, det vore snällt av dig att visa hur du skulle göra för att få till det sista.


<table border="0" cellpadding="2" cellspacing="2" width="550">
<tr>

<?php

 $query = "select s.albumid, s.songname, ";
 $query .="a.albumid, a.albumname, a.img ";
 $query .="from album a inner join songs s on a.albumid = s.albumid ";
 $result = mysql_query($query) or die("$query");
 $f = 0;

 while ($row = mysql_fetch_object($result)) {

    $f++;
    if ($f == 1) {
       echo "<td width=\"214\"> $row->albumname<br><img src=\"images/$row->img\"></td><td width=\"332\">\n";
    }
       echo "$row->songname<br>\n";
 }

?>

</td>
</tr>
</table>
LarsGMedlem sedan dec. 200012 464 inlägg
#6
<table border="0" cellpadding="2" cellspacing="2" width="550">
<tr>

<?php

 $query = "select s.albumid, s.songname, ";
 $query .="a.albumid, a.albumname, a.img ";
 $query .="from album a inner join songs s on a.albumid = s.albumid order by albumname ";
 $result = mysql_query($query) or die("$query");
 $albumname = "";

 while ($row = mysql_fetch_object($result)) {
    if ($albumname != $row->albumname) {
        $albumname = $row->albumname;
       echo "<td width=\"214\"> $row->albumname<br><img src=\"images/$row->img\"></td><td width=\"332\">\n";
        
    }
       echo "$row->songname<br>\n";
 }

?>

</td>
</tr>
</table>
andsj0Medlem sedan aug. 200419 inlägg
#7

Ett stort tack LarsG, Nu har jag lite att pyssla med för att få alla tabelltaggar på rätt platser....

/Anders

138 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)