JOIN und while Schleife

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • JOIN und while Schleife

    hallo,
    ... ich weis nicht ob das hier ein php oder sql problem ist dementsprechend auch nicht ob ich damit hier oder im sql forum besser aufgehoben bin, aber eines ist definitiv klar: ich komme nicht mehr ohne hilfe weiter..

    folgendes: ich versuche mit einer abfrage daten aus 3-4 verknüpften tabellen auszugeben. dies gelingt auch, alle notwendigen daten sind vorhanden.

    ich erzeuge mit einer while schleife folgende ausgabe:

    erstes buch: autor 1 Kategorie: 5
    erstes buch: autor 1 Kategorie: 1
    erstes buch: autor 1 Kategorie: 2
    zweites buch: autor 1 / autor 3 Kategorie: 1
    drittes buch: autor 2 Kategorie: 3
    viertes buch: autor 2 / autor 3 Kategorie: 1
    viertes buch: autor 2 / autor 3 Kategorie: 4
    fünftes buch: autor 1 / autor 2 / autor 3 Kategorie: 2
    sechtes buch: autor 2 Kategorie: 1

    dies enstpricht zwar der wahrheit, nicht aber der absolut notwendigen formatierung:

    erstes buch: autor 1 Kategorie: 5 / 1 / 2
    zweites buch: autor 1 / autor 3 Kategorie: 1
    drittes buch: autor 2 Kategorie: 3
    viertes buch: autor 2 / autor 3 Kategorie: 1 / 4
    fünftes buch: autor 1 / autor 2 / autor 3 Kategorie: 2
    sechtes buch: autor 2 Kategorie: 1

    ... der code funktioniert für 1 buch -> mehrere autoren optimal (ohne Kategorien),
    sobald ich jedoch die tabelle 'katalog_buch_kat' mit einbeziehe erscheint obengenannte formatierung. nachfolgend der letzte codeschnipsel mit dieser nicht gewünschten ausgabe.

    ich hoffe jemand hat einen rat für mich, sitze seit einigen tagen immer wieder an dieser geschichte mit den unterschiedlichsten ergebnissen.

    ich möchte doch nur 1 buch mit mehreren autoren und verschiedenen kategorien in einer reihe darstellen...

    PHP-Code:
    <?php
    /// Datenbank Server (Host)
        
    $server "localhost";
    /// Benutzer (admin)
        
    $benutzer "";
    /// Passwort (admin)
        
    $kennwort "";
    /// Datenbank (MySQL)
        
    $datenbank "autoren";
    /// Verbindung zum MySQL Server
        
    $verbindung mysql_connect($server,$benutzer,$kennwort) or die (mysql_error()); 
    /// Auswählen der Datenbank
        
    mysql_select_db($datenbank,$verbindung) or die (mysql_error());     
        
    /// SQL QUERY
        
    $sql "SELECT A.autor_id ,
                       A.name ,
                       B.buch_id ,
                       B.titel ,
                       D.kat_id                   
                  FROM 
                       katalog_autor A , 
                       katalog_buch B , 
                       katalog_buch_autor C , 
                       katalog_buch_kat D
                 WHERE 
                       C.autor_id = A.autor_id
                   AND C.buch_id = B.buch_id
                   AND D.buch_id = B.buch_id
              ORDER BY B.buch_id"
    ;

    /// Datenbankabfrage  
        
    $result mysql_query($sql) or die (mysql_error()); 
    ?>      
    <table width="500">
    <? $i = 0; while($row = mysql_fetch_array($result)) {
       /// Array durchlaufen
       $weiter = false;
       for ($x = 0; $x<$i; $x++) {
          // nachsehen ob das buch mehrere autoren besitzt, dementsprechend " / " trennzeichen zwischen autor
          if ($daten[$x]['buch_id'] == $row['buch_id'] && $daten[$x]['kat_id'] == $row['kat_id']) { // ????
                 $daten[$x]['name'] .= " / ".$row['name'];   // Trennzeichen " / "
                 $daten[$x]['kat_id'] = $row['kat_id'];
                 $weiter = true;
                 break;
                 }
          }
       if ($weiter == false) {
          $daten[$i]['titel'] = $row['titel'];
          $daten[$i]['name'] = $row['name'];
          $daten[$i]['buch_id'] = $row['buch_id'];
          $daten[$i]['kat_id'] = $row['kat_id'];
          $i++;
          }
       }
    for ($z=0;$z<$i;$z++) {
        $titel = $daten[$z]['titel'];
        $name = $daten[$z]['name'];
        $kat = $daten[$z]['kat_id'];
    ?>
      <tr> 
        <td><? echo $titel; ?>:</td>
        <td><? echo $name; ?></td>
        <td>Kategorie: <? echo $kat; ?></td>
      </tr>
    <? } ?>
    </table>
    und hier die db struktur falls es ein sql problem ist, wovon ich irgendwie aber nicht ausgehe (while):

    PHP-Code:
    #
    # Tabellenstruktur für Tabelle `katalog_autor`
    #

    CREATE TABLE katalog_autor (
      
    autor_id int(10NOT NULL auto_increment,
      
    name varchar(30NOT NULL default '',
      
    PRIMARY KEY  (autor_id)
    TYPE=MyISAM;

    #
    # Daten für Tabelle `katalog_autor`
    #

    INSERT INTO katalog_autor VALUES (1'autor 1');
    INSERT INTO katalog_autor VALUES (2'autor 2');
    INSERT INTO katalog_autor VALUES (3'autor 3');
    # --------------------------------------------------------

    #
    # Tabellenstruktur für Tabelle `katalog_buch`
    #

    CREATE TABLE katalog_buch (
      
    buch_id int(10NOT NULL auto_increment,
      
    titel varchar(50NOT NULL default '',
      
    PRIMARY KEY  (buch_id)
    TYPE=MyISAM;

    #
    # Daten für Tabelle `katalog_buch`
    #

    INSERT INTO katalog_buch VALUES (1'erstes buch');
    INSERT INTO katalog_buch VALUES (2'zweites buch');
    INSERT INTO katalog_buch VALUES (3'drittes buch');
    INSERT INTO katalog_buch VALUES (4'viertes buch');
    INSERT INTO katalog_buch VALUES (5'fünftes buch');
    INSERT INTO katalog_buch VALUES (6'sechtes buch');
    # --------------------------------------------------------

    #
    # Tabellenstruktur für Tabelle `katalog_buch_autor`
    #

    CREATE TABLE katalog_buch_autor (
      
    buch_id int(10NOT NULL default '0',
      
    autor_id int(10NOT NULL default '0',
      
    UNIQUE KEY buch_autor (buch_id,autor_id),
      
    KEY buch (buch_id),
      
    KEY autor (autor_id)
    TYPE=MyISAM;

    #
    # Daten für Tabelle `katalog_buch_autor`
    #

    INSERT INTO katalog_buch_autor VALUES (11);
    INSERT INTO katalog_buch_autor VALUES (21);
    INSERT INTO katalog_buch_autor VALUES (23);
    INSERT INTO katalog_buch_autor VALUES (32);
    INSERT INTO katalog_buch_autor VALUES (42);
    INSERT INTO katalog_buch_autor VALUES (43);
    INSERT INTO katalog_buch_autor VALUES (51);
    INSERT INTO katalog_buch_autor VALUES (52);
    INSERT INTO katalog_buch_autor VALUES (53);
    INSERT INTO katalog_buch_autor VALUES (62);
    # --------------------------------------------------------

    #
    # Tabellenstruktur für Tabelle `katalog_buch_kat`
    #

    CREATE TABLE katalog_buch_kat (
      
    kat_id int(10NOT NULL default '0',
      
    buch_id int(10NOT NULL default '0',
      
    KEY buch (buch_id),
      
    KEY autor (kat_id)
    TYPE=MyISAM;

    #
    # Daten für Tabelle `katalog_buch_kat`
    #

    INSERT INTO katalog_buch_kat VALUES (11);
    INSERT INTO katalog_buch_kat VALUES (21);
    INSERT INTO katalog_buch_kat VALUES (12);
    INSERT INTO katalog_buch_kat VALUES (33);
    INSERT INTO katalog_buch_kat VALUES (51);
    INSERT INTO katalog_buch_kat VALUES (44);
    INSERT INTO katalog_buch_kat VALUES (14);
    INSERT INTO katalog_buch_kat VALUES (25);
    INSERT INTO katalog_buch_kat VALUES (16); 

  • #2
    sql - forum ist hier besser.... * VERSCHIEB*

    --
    kann dir aber spontan auch keinen tipp geben. sorry.
    INFO: Erst suchen, dann posten![color=red] | [/color]MANUAL(s): PHP | MySQL | HTML/JS/CSS[color=red] | [/color]NICE: GNOME Do | TESTS: Gästebuch[color=red] | [/color]IM: Jabber.org |


    Kommentar

    Lädt...
    X