Zack: Datenbankabfrage mit Php

Hi,
mit viel Googelei und auch Lösungen auch hier aus dem Forum habe ich folgende Sache auf die Reihe bekommen:

  
$sql = "SELECT *  
FROM  
akteure a,  
anekdoten e  
INNER JOIN  
quellen z  
ON  
z.eid = e.eid  
INNER JOIN  
quellenverzeichnis q  
ON  
q.qvid = z.qvid  
WHERE  
a.sid = e.spielerid  

Jetzt habe ich folgendes Problem:

Die Struktur soll so aussehen:

ANEKDOTE
QUELLE1

und wenn es mehrere Quellen gibt, dann

ANEKDOTE
QUELLE1, QUELLE2

nur leider bekomme ich die Ausgabe (bei 3 Quellen)...

ANEKDOTE
QUELLE1

ANEKDOTE
QUELLE2

ANEKDOTE
QUELLE3

sprich die Anekdote wird n-Mal angezeigt und n entspricht der Anzahl der Quellen.
Ich bin ein bisschen Stolz auf das Erreichte, aber der letzte Schritt fehlt mir. Vielleicht könnt Ihr mir freundlicherweise helfen.

Danke schön!

  1. Habt Ihr vielleicht nen Ansatz für mich? Ich weiß nicht, wo ich noch anpacken soll.

    Hi,
    mit viel Googelei und auch Lösungen auch hier aus dem Forum habe ich folgende Sache auf die Reihe bekommen:

    $sql = "SELECT *
    FROM
    akteure a,
    anekdoten e
    INNER JOIN
    quellen z
    ON
    z.eid = e.eid
    INNER JOIN
    quellenverzeichnis q
    ON
    q.qvid = z.qvid
    WHERE
    a.sid = e.spielerid

    
    >   
    > Jetzt habe ich folgendes Problem:  
    >   
    > Die Struktur soll so aussehen:  
    >   
    > ANEKDOTE  
    > QUELLE1  
    >   
    > und wenn es mehrere Quellen gibt, dann  
    >   
    > ANEKDOTE  
    > QUELLE1, QUELLE2  
    >   
    > nur leider bekomme ich die Ausgabe (bei 3 Quellen)...  
    >   
    > ANEKDOTE  
    > QUELLE1  
    >   
    > ANEKDOTE  
    > QUELLE2  
    >   
    > ANEKDOTE  
    > QUELLE3  
    >   
    > sprich die Anekdote wird n-Mal angezeigt und n entspricht der Anzahl der Quellen.  
    > Ich bin ein bisschen Stolz auf das Erreichte, aber der letzte Schritt fehlt mir. Vielleicht könnt Ihr mir freundlicherweise helfen.  
    >   
    > Danke schön!  
    > 
    
    1. ANEKDOTE
      QUELLE1

      und wenn es mehrere Quellen gibt, dann

      ANEKDOTE
      QUELLE1, QUELLE2

      nur leider bekomme ich die Ausgabe (bei 3 Quellen)...

      ANEKDOTE
      QUELLE1

      ANEKDOTE
      QUELLE2

      ANEKDOTE
      QUELLE3

      Nach meinem Verständis geht das per SQL nicht, da jeder Datensatz für sich ja die angefragten Daten haben muss/soll.

      Allgemein sollte man nie * verwenden (außer vllt für einen schnellen Test)

      Warum das ganze nicht mit PHP lösen?
      Quasi ein assoziatives Array, wobei jedes Element ein Array mit den Quellen ist.

      MfG
      bubble

      1. Danke, ich frag mal anders :-)...

        Ich habe hier eine ähnliche Situation:

          
        $sql = "SELECT *  
        FROM  
        akteure a,  
        zitate e  
        WHERE  
        a.sid = e.spielerid  
        
        

        Das klappt ganz schön, aber wieder erscheint der betreffende "Akteur" bei 5 Zitaten 5x. Kann ich den nicht nur 1x aufführen bzw. jeden Akteur nur 1x?

        1. Das klappt ganz schön, aber wieder erscheint der betreffende "Akteur" bei 5 Zitaten 5x. Kann ich den nicht nur 1x aufführen bzw. jeden Akteur nur 1x?

          Genau das meinte ich mit "da jeder Datensatz für sich ja die angefragten Daten haben muss/soll", 5 Zitate = 5 Datensätze, jeder Datensatz muss natürlich alle angefragten Daten beinhalten.

          SQL ist ja nicht für die Datenverarbeitung in dem Sinne zuständig, sondern du bzw. dein Script/Programm.

          MfG
          bubble

          1. Danke!

            Ich hab das mit den Arrays noch nie gemacht, wenn ich's aber überlese, hört es sich logisch an und im Kopf habe ich ein Bild, wie das funktionieren könnte.

            Vielen Dank!

            1. Danke!

              Ich hab das mit den Arrays noch nie gemacht, wenn ich's aber überlese, hört es sich logisch an und im Kopf habe ich ein Bild, wie das funktionieren könnte.

              Erstellung des Array ist ganz leicht.
              Angenommen das Feld mit dem Inhalt "ANEKDOTE" heißt "TYPE" und das Feld für die Quelle heißt "SOURCE"

              Zum erstellen:

              $data = Array();  
              while(($line = mysql_fetch_assoc(...)) !== false)  
                  $data[$line["TYPE"]] = $line["SOURCE"];
              

              um durch das Array durchzulaufen:

              foreach($data as $type => $srcs)  
              {  
                 echo "Quellen von $type:";  
                 foreach($srcs as $src)  
                     echo " $src";  
                 echo "<br>";  
              }
              

              Gibt alles in From von "Quellen von ANEKTDOTE: QUELLE1 QUELLE2<br>" aus.

              Ich möcht noch mal daran erinnern, dass man nicht * bei SELECT im SQL benutzen soll (wenn man direkt die Namen der Felder benutzt, bekommt man 1. nur die Daten die man braucht, was das ganze schneller macht, besonders wenn es sich um eine Datenbank auf "weitentfernten" Server handelt, 2. macht das schon eher auf Schreibfehler, etc. aufmerksam)

              MfG
              bubble

              PS: Assoziative Arrays scheinen dir ja nicht so geläufig zu sein, also vllt mal hier noch mal nachlesen ;)

    2. Hallo,

      GROUP_CONCAT und GROUP sollten die Stichworte sein, unter denen du im Handbuch deines Datenbanksystems (mysql) nachschlagen solltest.

      Ciao, Frank