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
}
Databaser & SQLur Databashanterare & SQL
6 svar · 317 visningar · startad av andsj0
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.
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
}
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.
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
}
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>
<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>
Ett stort tack LarsG, Nu har jag lite att pyssla med för att få alla tabelltaggar på rätt platser....
/Anders