Mehrere Zeilen einer Tabelle in eine Ergebniszeile, Gruppenbruch?

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

  • Mehrere Zeilen einer Tabelle in eine Ergebniszeile, Gruppenbruch?

    [FONT=Courier New]Hallo,[/FONT]
    [FONT=Courier New]ich habe eine Namenstabelle, die über den Schlüssel IDNamen mit einer Berufstabelle verknüpft ist. Namen sind Unikate, aber jeder Name kann mehrere Berufe haben (1:n). Wie bekomme ich jetzt bei einer Abfrage (select) die verschiedenen Berufe in eine Ergebniszeile? Ich habe gelesen, dass das mit einem "Gruppenbruch" funktionieren solle, habe aber nicht wirklich eine Ahnung wie das gegen soll, WEIL:[/FONT]
    [FONT=Courier New]Ich gebe die Daten mit einer Tabellenfunktion aus, die schon ein Array benutzt. Ein Array im Array, geht das?[/FONT]
    PHP-Code:
    function tab_out($result)
    {
    $num mysql_num_rows($result);
    for (
    $j 0$j $num$j++)
    {
    $row mysql_fetch_array($result);
    echo 
    "<table width='100%' border='0' cellspacing='2' cellpadding='0' height='16' class='texttab'>";
    echo 
    "<tr><td>$row[0]</td></tr>"//es gibt die $rows[0-15] 
    [FONT=Courier New]Die Berufe sind im $row[13] (neben anderen Daten aus den Tabellen). Soll das dann $row[13.1] sein, oder wie?[/FONT]

    [FONT=Courier New]Ich könnte auch in der Ursprungstabelle selbst alle Berufe einer ID in ein Feld kopieren, was aber keine sehr elegante Lösung ist.[/FONT]

    [FONT=Courier New]Sorry für die blöde Frage. Danke[/FONT]
    Zuletzt geändert von SqlPhpNovize; 15.08.2010, 09:17.

  • #2
    Und wo liegt jetzt dein Problem?

    Wenn du dich über das Verfahren des Gruppenbruchs informiert hast, und verstanden hast, was zu tun ist - dann brauchst du es doch nur noch umsetzen.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Das ist ja das Problem, dass ich nicht verstehe, wie man das umsetzen muss. Bin Anfänger. Verstehe eben nicht, wie ich die Schleife, die je Durchlauf die Ergebnisse aus der Datenbank ausgibt, dazu bringe, die Daten des nächsten, übernächsten Durchlaufs vorauszunehmen und schon beim ersten Mal als gemeinsamen String auszugeben. Da müßte ich ja für jede Spalte, die Mehrfachwerte hat, nochmal eine "interne" Schleife programmieren, die alle Ergebnisse der Spalte ausgibt.
      Zuletzt geändert von SqlPhpNovize; 15.08.2010, 07:43.

      Kommentar


      • #4
        Hallo,

        hilft dir mein Blogeintrag zu dem Thema vielleicht weiter?

        Gruß,

        Amica
        [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
        Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
        Super, danke!
        [/COLOR]

        Kommentar


        • #5
          Gruppenbruch

          Vielen Dank, schon frustrierend, dass alles was ich nicht verstehe immer so einfach zu lösen ist.
          Aber doch nicht ganz: Habe meinen Code folgendermaßen ergänzt ($row[19] enthält die ID).
          ALT:
          PHP-Code:
          echo "<tr><td>"; echo mysql_field_name($result,13); echo "</td>";
          echo 
          "<td>$row[13]</td></tr>"
          NEU:
          PHP-Code:
          echo "<tr><td>"; echo mysql_field_name($result,13); echo "</td>";
          $array = array(); 
          foreach (
          $rows as $row) { 
          $array[$row[13]][$row[19]][] = $row

          echo 
          "<td>$array</td></tr>"
          Leider bekomme ich da die Fehlermeldung:
          Invalid argument supplied for foreach()

          Danke
          Robert
          Zuletzt geändert von SqlPhpNovize; 15.08.2010, 08:39.

          Kommentar


          • #6
            Bitte bearbeite jetzt erstmal deine Beiträge mit dem -Button, danach [Erweitert] und dort benutzt du die Code-Tags (siehe meine Signatur).

            Danach überlegst du mal, warum es bei dir keine Variable $rows gibt, aber dennoch irgendetwas aus dem man mehrmals eine $row abrufen kann und ob du nicht lieber das Ding an Stelle der foreach-Schleife benutzen willst.
            [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
            Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
            Super, danke!
            [/COLOR]

            Kommentar


            • #7
              Hallo Freundin der Nacht!

              Habe meinen Beitrag geändert
              Aber ich stehe wohl immer noch auf der Leitung:
              Du meinst wohl die Result-Variable, aber das funzt auch nicht

              PHP-Code:
              foreach ($result as $row) { 
                  
              $array[$row[13]][$row[19]][] = $row

              Amicus Aurorae
              Zuletzt geändert von SqlPhpNovize; 15.08.2010, 08:50.

              Kommentar


              • #8
                In deinem Falle musst du ganz von dem foreach weg und mit
                PHP-Code:
                while ($row mysql_fetch_array($result)) {
                    
                // ...

                arbeiten. Wenn dich diese Zahlen (z. B. $row[[COLOR="Red"]13[/COLOR]]) nicht glücklich machen, nimm mysql_fetch_assoc. Dann kannst du auf die Felder mit Spaltennamen zugreifen (z. B. $row['first_name']).

                Bitte auch den ersten Beitrag noch anpassen. Danke.
                Zuletzt geändert von AmicaNoctis; 15.08.2010, 08:57.
                [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                Super, danke!
                [/COLOR]

                Kommentar


                • #9
                  "nimm mysql_fetch_assoc" -> werde ich machen, super Tipp!

                  Ich habe das jetzt so geändert:
                  PHP-Code:
                  echo "<td width='93%'>";
                  while (
                  $row mysql_fetch_array($result)){ 
                  echo 
                  $row[13]." ";
                  }
                  echo 
                  "</td></tr>"
                  Beim ersten Datensatz, der Berufsangaben enthält, werden die Berufe auch richtig aneinandergereiht.
                  Aber alle folgenden Daten werden unterdrückt.

                  Das Ergebnis (bitte etwas nach unten scrollen):

                  http://www.oeaw.ac.at/kmf/cvp/demos/...p#$Name="Klug"

                  Danke Robert

                  Kommentar


                  • #10
                    Ich meinte das so:
                    PHP-Code:
                    $array = array();
                    while (
                    $row mysql_fetch_array($result)) { 
                        
                    $array[$row[13]][$row[19]][] = $row

                    Dann siehst du dir erstmal in aller Ruhe mit print_r an, wie $array aufgebaut ist und überlegst deine weiteren Schritte.

                    Zitat von SqlPhpNovize Beitrag anzeigen
                    http://www.oeaw.ac.at/kmf/cvp/demos/Bio.php#$Name="Klug"
                    Da kommt (nach einiger Zeit) nur:

                    Notice: Undefined index: Bio in /usr/local/www/data/kmf_cvp/demos/Bio.php on line 6

                    Notice: Undefined index: Jahrmin in /usr/local/www/data/kmf_cvp/demos/Bio.php on line 7

                    Notice: Undefined index: Jahrmax in /usr/local/www/data/kmf_cvp/demos/Bio.php on line 8
                    Incorrect key file for table '/tmp/#sql_a5d_0.MYI'; try to repair it
                    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
                    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
                    Super, danke!
                    [/COLOR]

                    Kommentar


                    • #11
                      Sorry, ich bekomme das nicht hin, trotzdem vielen Dank. Das Problem liegt wohl am ($row = mysql_fetch_array($result), das ja schon am Anfang der Tabellenausgabe steht, also in deiner while-Schleife ein zweites Mal erscheint. Das verträgt sich irgendwie nicht. Ich werde Wohl oder Übel jemanden dafür engagieren müssen. Vielleicht kennst ja jemanden, der so kleine Sache gegen Bezahlung macht.
                      LG Robert

                      Kommentar

                      Lädt...
                      X