Avatar billede hanne_e Nybegynder
17. november 2004 - 01:11 Der er 8 kommentarer og
1 løsning

Løkker og arrays i php/mysql

Kan nogen hjælpe?
Problemet er at jeg vist må have en løkke mere - indtil videre udskriver den resultaterne ét ad gangen - altså både cd-titel, kunstner osv. + én sang. herefter hentes en ny række - selvom cd'en og bandet er det samme. Jeg vil hellere have at den skriver band osv. og så lister alle sangene umiddelbart efter. Var det mon forståeligt?

Jeg har oprettet to tabeller i mysql:

CREATE TABLE title(
title_id int(10) primary key auto_increment,
cd_title VARCHAR(100) NOT NULL,
artist_name VARCHAR(100) NOT NULL,
year int (4),
INDEX (title_id)
) TYPE=InnoDB;

CREATE TABLE song (
title_id int(10) NOT NULL,
song_id int(10) primary key auto_increment,
song_title VARCHAR(100) NOT NULL,
INDEX (song_id),
FOREIGN KEY (title_id) REFERENCES title(title_id)
) TYPE=InnoDB;

php-filen ser sådan ud:

<?php
    $title= "CD Library";
    require('../inc/header.inc');


    $conn=mysql_connect("xx", "xx", "xx");
    mysql_select_db("cd", $conn);

    $query="SELECT title.title_id AS ID, song.song_id AS SID, title.cd_title AS CD,
    artist_name AS Artist, year, song.song_title AS Songs
    FROM title, song
    WHERE title.title_id = song.title_id order BY ID;";
    $result=mysql_query($query, $conn) or die (mysql_error());

      $nor=$number_of_rows=mysql_num_rows($result);

    if ($nor==0){
        echo "<p>Der er endnu ingen CD'er- men v&aelig;r s&aring; god at oprette</p>";
    }else{
        echo "<p>Antallet af sange er <b>$number_of_rows</b>.</p><hr>";
    }
      while ($postArray=mysql_fetch_array($result)){

        $ID=$postArray['ID'];
        $CD=$postArray['CD'];
        $Artist=$postArray['Artist'];
            $Songs=$postArray['Songs'];
            echo "<p>CDnr. <b>$ID</b>/<em>$CD</em> /Artist: <b>$Artist</b></p>
            <ul><li>$Songs</li></ul>";       


        echo "<p><a href=\"cd_add_form.php?title_id=$title_id\">Tilføj sange</a> eller <a href=\"cd_delete_form.php?title_id=$title_id\">slet</a> CD<hr></p>";
    }
   
    echo "<p>Tilf&oslash;j en <a href=\"cd.html\">ny CD</a>.</p>";
   
    require('../inc/footer.inc');
?>
Avatar billede hmortensen Nybegynder
17. november 2004 - 07:05 #1
Du ligger blot en while løkke mere ind i din while løkke sådan her:

$sql = "SELECT id, navn FROM tabel";
$result = mysql_query($sql);
while ($row = mysql_fetch_array($result)) {
    echo $row['navn'];
    $sql2 = "SELECT id, navn FROM tabel2";
    $result2 = mysql_query($sql2);
    while ($row2 = mysql_fetch_array($result2)) {
        echo $row2['navn'];
    }
}
Avatar billede hanne_e Nybegynder
17. november 2004 - 18:31 #2
Tak!
Jeg afprøver lige og vender tilbage med points!
Avatar billede hanne_e Nybegynder
19. november 2004 - 11:02 #3
Hej igen
Jeg synes ikke forslaget virker helt ?! Den skriver det bare ud på én lang række. Kan du hjælpe mig med at få den til at skrive

Cdnavn/bandets navn/årstal

    -sang 1
    -sang 2
    -sang 3
osv.?
Avatar billede hmortensen Nybegynder
19. november 2004 - 11:20 #4
Hvis du får de rigtige resultater ud, skal du jo bare formatere det
Avatar billede sukos Juniormester
19. november 2004 - 11:27 #5
Måske noget a'la'

$bands = mysql_query("SELECT * FROM `title` ORDER BY `artist_name`") or die (mysql_error());

while($rows = mysql_fetch_object($bands)) {
echo $rows->cd_title ." - ". $rows->artist_name ." - ". $rows->year ."\n";
echo"<div style=\"margin-left: 20px;\">";

$getalbum = mysql_query("SELECT * FROM `song` WHERE `title_id` = '". $rows->title_id ."'") or die (mysql_error());
while($songs = mysql_fetch_object($getalbum)) {
echo $songs->song_title ."<br>\n";
}
mysql_free_result($getalbum);
echo"</div>\n";
}

mysql_free_result($bands);


Men kunne vel nok laves i en enkelt query?
Avatar billede hanne_e Nybegynder
27. november 2004 - 00:19 #6
Hej igen
Så har jeg endelig fået det til at virke! Det var din løsning, sukos, der gjorde udslaget.

hmortensen løsning gav et resultat som det her:
Arturo SandovalJoy SpringSanduSoledadCirqueDet g†r en man omkring i mina skorSimturTangoorkestretJoy SpringSanduSoledadCirqueDet g†r en man omkring i mina skorSimturBo Kaspers OrkesterJoy SpringSanduSoledadCirqueDet g†r en man omkring i mina skorSimtur

Den gentog altså en del osv.

Så det må blive sukos der får points - men tak for hjælpen begge to!!!
Avatar billede hanne_e Nybegynder
30. november 2004 - 02:19 #7
sukos, er du sød at lægge et svar? Så får du fluks points!
Avatar billede sukos Juniormester
30. november 2004 - 02:58 #8
Jow da!
Avatar billede hanne_e Nybegynder
30. november 2004 - 19:17 #9
Og tak for det!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester