Gruppenwechsel/Datenbankabfrage/2Tabellen HELP!

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

  • Gruppenwechsel/Datenbankabfrage/2Tabellen HELP!

    Hallo ich komme an einer stelle einfach nicht weiter *heul*

    ich habe folgendes und problem:

    - zwei tabellen die mit einer id (memberid) verknüpft sind
    - - 1. tabelle mitgliederdaten (anschrift, fon, fax usw...)
    - - 2. tabelle funktionen eines mitglieds, drei spalten mit team, teamclass und die memberid zur 1. tabelle (verknüpfung mitgliederdaten)

    in diese 2. tabelle (zur besseren erklärung) werden funktionen eines mitglieds eingetragen die von 1 bis unendlich viele sein können.

    das auslesen ist erstmal kein problem und durch ein gruppenwechsel sortiere ich nach der memberid, nur die funktionen werden dann unter die memberdaten aufgelistet was aber genau anders herum erfolgen soll, also zuerst die funktionen des mitglieds und dann seine daten:

    funktion
    funktion
    .....
    mitgliedsdaten

    jemand einen rat wie ich den spieß umdrehe?


    auszug aus meiner abfrage:
    PHP-Code:
    $sql "SELECT
                club_coach.team,
                club_coach.teamclass,
                club_coach.memberid,
                club_member.name,
                club_member.firstname,
                club_member.fon
              FROM
                club_coach,
                club_member
               WHERE
                club_coach.clubid = '"
    .$clubid."' AND club_coach.memberid = club_member.id
            ORDER BY
                club_coach.memberid DESC"
    ;
    $result mysql_query($sql) OR die(mysql_error());
    $currletter 0;

    while(
    $row mysql_fetch_array($result)) {

    $id $row['memberid'];

    if(
    $id != $currletter) {
    echo 
    "<ul>\n";
    echo 
    " <li>".$row['name']."</li>\n";
    echo 
    " <li>".$row['firstname']."</li>\n";
    echo 
    " <li>".$row['fon']."</li>\n";
    echo 
    "</ul>\n";
    }

    echo 
    "<div>".$row['team']." (".$row['teamclass'].")</div>\n";

    $currletter $id;



  • #2
    wenn ich dich richtig verstanden habe, willst du die adressdaten am ende eines datensatzes ausgeben? ... dann könnte es so gehen:
    PHP-Code:
    ...
    if(
    $id != $currletter) {
         if(isset(
    $address))
              echo 
    $address;

    $address "<ul>\n
                        <li>"
    .$row['name']."</li>\n
                        <li>"
    .$row['firstname']."</li>\n
                        <li>"
    .$row['fon']."</li>
                        </ul>\n"
    ;
    }

    echo 
    "<div>".$row['team']." (".$row['teamclass'].")</div>\n";

    $currletter $id;

    }
    echo 
    $address
    Kissolino.com

    Kommentar


    • #3
      ich dachte schon es wäre so simpel .

      leider geht diese lösung nicht auf, da ich glaube noch was verschwiegen zu haben.

      ich rufe aus der db nicht nur ein mitglied ab sondern mehrere und daher gehts nicht.

      es ist im grunde wie eine sortierung nach dem alphabet:

      A (Mitglied)
      ------
      Affe (funktion)
      Amsel (funktion)

      H (Mitglied)
      -----
      Hund (funktion)
      Hamster (funktion)
      Huhn (funktion)

      so nun soll es aber genau anderes herum dargestellt/ausgelesen werden

      Affe (funktion)
      Amsel (funktion)
      ------
      A (Mitglied)

      Hund (funktion)
      Hamster (funktion)
      Huhn (funktion)
      ------
      H (Mitglied)

      sieht eigentlich leicht aus aber ich bekomme noch ein rappel an dieser lösung!

      Kommentar


      • #4
        kannst du mal deine datenstruktur nachvollziehbar beschreiben ...?

        ich kann nicht erkennen, wo du die "funktion" überhaupt ausliest.

        und
        Affe (funktion)
        Amsel (funktion)
        ------
        A (Mitglied)
        leuchtet mir auch nicht so ganz ein - was sind "affe", "amsel" und "a" denn für namen/begriffe ...?
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          siehe bitte mal oben in das script!

          mitglied = name, firstname, fon
          function= team und teamclass

          das mit dem affen& anderem getier war nur ein bsp wie es ausgelesen werden soll, weil man ja auch meistens einen guppenwechsel beim auflisten einer übersicht nach dem alphabet nutzt, im grunde das gleiche!

          nur es soll halt so "verdreht" dargestellt werden:

          function (team und teamclass)
          function (team und teamclass)
          function (team und teamclass)
          function (team und teamclass)
          ------
          mitglied1 (name, firstname, fon)

          function (team und teamclass)
          function (team und teamclass)
          ------
          mitglied2 (name, firstname, fon)

          function (team und teamclass)
          ------
          mitglied3 (name, firstname, fon)



          so sieht die momentane sortierung oben im script aus:

          mitglied1 (name, firstname, fon)
          ------
          function (team und teamclass)
          function (team und teamclass)
          function (team und teamclass)
          function (team und teamclass)

          Kommentar


          • #6
            OK, jetzt hab ich kapiert, was du willst :-)

            na gut, dann mach' den gruppenwechsel halt andersrum - erst wenn ein neuer datensatz kommt, gibst du die daten des alten mitglieds aus.
            dabei beim allerersten datensatz natürlich aufpassen, ausgabe hier noch nicht anstoßen; und mitgliedsdaten des letzten DS nach der schleife noch ausgeben, da dies bei dieser logik nicht mehr innerhalb passiert.

            pseudocode:
            PHP-Code:
            $flag_erster_datensatz true;

            while(
            $aktueller_datensatz mysql_fetch_array(...)) {
              if(!
            $flag_erster_datensatz && $aktueller_datensatz[mitglied] != $vorletzter_datensatz[mitglied]) {
                
            ausgabe_mitgliedsdaten($vorletzter_datensatz[mitglied]);
              }

              
            ausgabe_funktionsdaten($aktueller_datensatz[funktionsdaten]);

              
            $flag_erster_datensatz false;
              
            $vorletzter_datensatz $aktueller_datensatz;
            }

            ausgabe_mitgliedsdaten($vorletzter_datensatz[mitglied]); // ausgabe mitgliedsdaten letzter DS 
            Zuletzt geändert von wahsaga; 17.10.2004, 19:18.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              danke , ich habs nun im grunde hinbekommen!

              PHP-Code:
              $result mysql_query($sql) OR die(mysql_error());
              $flag_erster_datensatz true;

              while(
              $row mysql_fetch_array($result)) {

              $aktueller_datensatz "".$row['memberid']."".$row['name']."<br />\n";


              if(!
              $flag_erster_datensatz && $aktueller_datensatz != $vorletzter_datensatz) {
              echo 
              $vorletzter_datensatz;
              }

              echo 
              "<div>".$row['team']." ".$row['teamclass']."</div>\n";

              $flag_erster_datensatz false;
              $vorletzter_datensatz $aktueller_datensatz;
              }

              echo 
              $vorletzter_datensatz
              wo ich noch meine schwierigkeiten habe ist die ausgabe bzw der vergleich, so wie es oben ist geht es nur die ausgabe der mitgliedsdaten ist einwenig umfangreicher und wenn ich den ganzen code in die variable $aktueller_datensatz schreibe vergleicht er nicht mehr korrekt.

              hast da noch ein tip wie ich das anstelle?

              Kommentar


              • #8
                Original geschrieben von Frashier
                und wenn ich den ganzen code in die variable $aktueller_datensatz schreibe vergleicht er nicht mehr korrekt.
                warum nimmst du für $aktueller_datensatz nicht einfach das ergebnis von mysql_fetch_array, so wie in meinem beispiel?
                PHP-Code:
                while($aktueller_datensatz mysql_fetch_array($result)) 
                und für den vergleich nimmst du dann $aktueller_datensatz['memberid'].
                I don't believe in rebirth. Actually, I never did in my whole lives.

                Kommentar


                • #9
                  meinst du so?

                  PHP-Code:
                  $result mysql_query($sql) OR die(mysql_error());
                  $flag_erster_datensatz true;

                  while(
                  $row mysql_fetch_array($result)) {

                  $aktueller_datensatz $row['memberid'];


                  if(!
                  $flag_erster_datensatz && $aktueller_datensatz != $vorletzter_datensatz) {
                  echo 
                  "".$row['name']."<br />\n";
                  echo 
                  "".$row['firstname']."<br />\n";
                  }

                  echo 
                  "<div>".$row['team']." ".$row['teamclass']."</div>\n";

                  $flag_erster_datensatz false;
                  $vorletzter_datensatz $aktueller_datensatz;
                  }
                  echo 
                  $vorletzter_datensatz
                  so funzt es nicht, das prob: wie bekomme ich den vorletzten_datensatz dann ausgegeben, wenn ich ihn ich vorher irgend wo gespeichert habe. wie bekomme ich die den vorletzten_datensatz aus dem mysql_fetch_array?

                  Kommentar


                  • #10
                    Original geschrieben von Frashier
                    wie bekomme ich die den vorletzten_datensatz aus dem mysql_fetch_array?
                    du hast doch in der while-schleife bereits die zuweisung
                    PHP-Code:
                    $vorletzter_datensatz $aktueller_datensatz
                    gemacht, d.h. nach der while-schleife hast du in $vorletzter_datensatz die daten aus dem letzten datensatz stehen.

                    damit dessen mitgliedsdaten dann auch noch ausgegeben werden, musst du dann nach der schleife noch einmal
                    PHP-Code:
                    echo $vorletzter_datensatz['name']."<br />\n";
                    echo 
                    $vorletzter_datensatz ['firstname']."<br />\n"
                    machen.


                    btw: gewöhne dir doch mal den unfug á la
                    echo "".$irgendwas;
                    ab. wieso schreibst du nicht gleich
                    echo $irgendwas;
                    dafür ...?
                    I don't believe in rebirth. Actually, I never did in my whole lives.

                    Kommentar


                    • #11
                      Vielleicht noch ein Tipp:

                      Mit Joins arbeiten DBs gewöhnlich schneller:
                      OffTopic:
                      SELECT
                      club_coach.team,
                      club_coach.teamclass,
                      club_coach.memberid,
                      club_member.name,
                      club_member.firstname,
                      club_member.fon
                      FROM
                      club_coach,
                      club_member
                      WHERE
                      club_coach.clubid = '".$clubid."' AND club_coach.memberid = club_member.id
                      ORDER BY
                      club_coach.memberid DESC


                      also evtl. :

                      SELECT
                      club_coach.team,
                      club_coach.teamclass,
                      club_coach.memberid,
                      club_member.name,
                      club_member.firstname,
                      club_member.fon
                      FROM
                      club_coach LEFT JOIN club_member ON club_coach.memberid = club_member.id
                      WHERE
                      club_coach.clubid = '".$clubid."'
                      ORDER BY
                      club_coach.memberid DESC
                      chansel0049
                      ----------------------------------------------------
                      if you've reached the bottomline - dig further!
                      Übersetzer gesucht? http://www.babelport.com

                      Kommentar

                      Lädt...
                      X