for-Schleifen

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

  • #31
    Ok, also das Skript ist Mist, nach 3 Seiten wissen wir das nun endlich.

    Könnte mir jetzt bitte mal jemand helfen und sagen, wie so ein JOIN-Befehl für soviele Abfragen aussieht?

    Kommentar


    • #32
      Also ich habs jetzt so gemacht (erstmal für 4 Ebenen) um die Downline von der id 6 zu bekommen:


      PHP-Code:
      $res mysql_query("SELECT 
      A.username as usereins, 
      B.username as userzwei, 
      C.username as userdrei, 
      D.username as uservier 
      FROM mitglieder AS A 
      INNER JOIN mitglieder AS B ON B.id=A.refid 
      INNER JOIN mitglieder AS C ON C.id=B.refid 
      INNER JOIN mitglieder AS D ON D.id=C.refid 
      WHERE A.id='6' "
      ); 
      Funktioniert auch, bis auf einen kleinen Kosmetikfehler:
      Mir wird nicht die Downline, sondern die Upline angezeigt *ggg*
      Aber es soll ja genau anders rum sein ;-)

      Kommentar


      • #33
        na bitte geht doch

        ist es nun 'ne Mitteilung an uns oder hast du 'n Problem das Teil umzudrehen?

        Kommentar


        • #34
          Also ich habs jetzt umgedreht:

          PHP-Code:
          $res mysql_query("SELECT 
          A.username as usereins, 
          B.username as userzwei, 
          C.username as userdrei, 
          D.username as uservier,
          E.username as userfive 
          FROM mitglieder AS A 
          INNER JOIN mitglieder AS B ON B.refid = A.id 
          INNER JOIN mitglieder AS C ON C.refid = B.id 
          INNER JOIN mitglieder AS D ON D.refid = C.id
          INNER JOIN mitglieder AS E ON E.refid = D.id 
          WHERE A.id='6"
          ); 
          Nun bekomm ich Downline angezeigt.
          Einziges Problem, wo ich jetzt EURE HILFE brauche *ggg*, ist, das bei Usern, die beispielsweise ab Ebene3 keinen User mehr haben, GAR NICHTS angezeigt wird.
          Woran liegt das?

          Kommentar


          • #35
            macht aus INNER JOIN einfach LEFT JOIN, dann wirst du bei diesen Usern ab der 3. Ebene nur NULL bekommen.

            Kommentar


            • #36
              Hey super, cool, ja jetzt funktioniert das.

              Ich geb das jetzt in ner while-schleife aus.
              PHP-Code:
              while(list($usereins$userzwei$userdrei$uservier$userfive$usersechs$usersieben
              $useracht$userneun$userzehn$userelf) = mysql_fetch_array($res)){
              echo 
              "$usereins => $userzwei => $userdrei => $uservier => $userfive =>
              $usersechs => $usersieben => $useracht => $userneun => $userzehn => $userelf<br>";

              Das ist sehr unübersichtlch, weil jedesmal die komplette Downline gezeigt wird.
              Kann ich das jetzt auch irgendwie sortieren?

              Also Beispielsweise:
              Level 1: username1, username2
              Level 2: username3, username4

              etc.?

              Ist das möglich?
              Zuletzt geändert von Wannabe; 04.08.2004, 17:28.

              Kommentar


              • #37
                aber ja doch,

                - SQL-seitig mit ORDER BY, oder
                - PHP-seitig mit den ArraySortFkt., Nachteil: du musst alles erstmal auslesen => nicht performant

                BTW: bitte dein Posting von vorhin so umbrechen, dass man beim Lesen nicht scrollen muss. Danke.

                Kommentar


                • #38
                  Mmh...
                  Irgendwo muss aber noch ein fehler sein.

                  Das ist der komplete Code für die 11 Ebenen:

                  PHP-Code:
                  $res mysql_query("SELECT 
                  A.username as usereins, 
                  B.username as userzwei, 
                  C.username as userdrei, 
                  D.username as uservier,
                  E.username as userfive,
                  F.username as usersechs, 
                  G.username as usersieben, 
                  H.username as useracht, 
                  I.username as userneun,
                  J.username as userzehn,
                  K.username as userelf,
                  L.username as usertwelve
                  FROM mitglieder AS A 
                  LEFT JOIN mitglieder AS B ON B.refid = A.id 
                  LEFT JOIN mitglieder AS C ON C.refid = B.id 
                  LEFT JOIN mitglieder AS D ON D.refid = C.id
                  LEFT JOIN mitglieder AS E ON E.refid = D.id
                  LEFT JOIN mitglieder AS F ON F.refid = E.id 
                  LEFT JOIN mitglieder AS G ON G.refid = F.id 
                  LEFT JOIN mitglieder AS H ON H.refid = G.id
                  LEFT JOIN mitglieder AS I ON I.refid = H.id
                  LEFT JOIN mitglieder AS J ON J.refid = I.id
                  LEFT JOIN mitglieder AS K ON K.refid = J.id
                  LEFT JOIN mitglieder AS L ON L.refid = K.id
                  WHERE A.id='3'"
                  ); 
                  Und die while-schleife:

                  PHP-Code:
                  while(list($usereins$userzwei$userdrei$uservier$userfive
                  usersechs$usersieben$useracht$userneun$userzehn$userelf
                  $usertwelve) = mysql_fetch_array($res)){
                  $zahl++;
                  echo 
                  "<b>$zahl</b> $usereins => $userzwei => $userdrei => $uservier 
                  => 
                  $userfive => $usersechs => $usersieben => $useracht => $userneun 
                  => 
                  $userzehn => $userelf => $usertwelve<br>";

                  Der letzte Eintrag von $zahl ist bei diesem User 265, der vorherige Code, den ich ja auch hier gepostet hab, der gibt mir aber 328 User an.
                  Ist ein Unterschied von 63.
                  Also ich habs anhand der Datenbank mal geprüft.
                  Es werden definitiv ein paar User bei der Abfrage "unterschlagen"
                  Wie kommt das?
                  Zuletzt geändert von Wannabe; 04.08.2004, 17:48.

                  Kommentar


                  • #39
                    Also es fehlen bei allen Usern, die so viele Refs haben bei der Ausgabe etwa 60 Refs... Merkwürdig.
                    Kann es sein, dass die Anfrage zu lang ist?
                    Oder ist die while-Schleife nicht korrekt?

                    Kommentar


                    • #40
                      Es fehlen nur in den hinteren Ebenen welche...
                      Aber wieso???

                      Kommentar


                      • #41
                        Schöner Monolog hast du, ist es denn schon so weit

                        lass erstmal die Sachen mit list() liegen, versuch mal so:
                        PHP-Code:
                        while ($row=mysql_fetch_array(...)) {
                           echo 
                        '<pre>';
                           
                        print_r($row);
                           echo 
                        '</pre>';

                        und schaut dir die Ausgabe an, ob alles da sind, da du mit deiner Version die NULL Werte nicht mitkriegst.

                        Kommentar


                        • #42
                          Also das Problem ist das gleiche.
                          Die meißten sachen werden korrekt angezeigt, aber ein paar User fehlen einfach.
                          Sind am Ende 63 Reihen zu wenig!

                          Aber ansonsten alles da.

                          PHP-Code:
                          [0] => USER1
                              
                          [usereins] => USER1
                              
                          [1] => USER2
                              
                          [userzwei] => USER2
                              
                          [2] => 
                              [
                          userdrei] =>
                              [
                          3] => 
                              [
                          uservier] =>
                              [
                          4] => 
                              [
                          userfive] =>
                              [
                          5] => 
                              [
                          usersechs] =>
                              [
                          6] => 
                              [
                          usersieben] => 
                              [
                          7] => 
                              [
                          useracht] => 
                              [
                          8] => 
                              [
                          userneun] => 
                              [
                          9] => 
                              [
                          userzehn] => 
                              [
                          10] => 
                              [
                          userelf] => 
                              [
                          11] => 
                              [
                          usertwelve] => 
                          Zuletzt geändert von Wannabe; 04.08.2004, 20:20.

                          Kommentar


                          • #43
                            BITTE BEIM POSTEN DIE ZEILEN UMBRECHEN

                            also ich sehe 'ne Menge Null-Werte

                            mach mal so: ($row = mysql_fetch_array($result, MYSQL_ASSOC)) damit du nur assoziatives Array
                            bekommt und schau nochmals hin, ich habe irgendwie das Gefühl, dass du das Ergebnis nicht richtig interpretiert
                            Zuletzt geändert von asp2php; 04.08.2004, 21:53.

                            Kommentar


                            • #44
                              Dann ist die Ausgabe folgende:

                              PHP-Code:

                              Array
                              (
                                  [
                              usereins] => USER1   
                                  
                              [userzwei] => USER2
                                  
                              [userdrei] => 
                                  [
                              uservier] => 
                                  [
                              userfive] => 
                                  [
                              usersechs] =>
                                  [
                              usersieben] =>
                                  [
                              useracht] => 
                                  [
                              userneun] =>
                                  [
                              userzehn] =>
                                  [
                              userelf] => 
                                  [
                              usertwelve] => 

                              Was die Interpretation des Ergebnisses angeht:
                              Wenn der User, für den ich das mache, in seiner gesamten Downline über alle Ebenen über 300 Refs hat, dann muss doch auch das Ergebnis, dass ich mir ausgeben lasse über 300 Reihen haben

                              P.S.: Wieso? Da war doch nix zum umbrechen?
                              P.P.S.: Das ist EIn Array von über 200.
                              Zuletzt geändert von Wannabe; 04.08.2004, 20:18.

                              Kommentar


                              • #45
                                Original geschrieben von goth
                                Wenn's kein Standard-Script ist ... würd ich mal sagen ... hat "Smax" scheisse gebaut ... !
                                werden wetten angenommen dass es smax war?
                                Beantworte nie Threads mit mehr als 15 followups...
                                Real programmers confuse Halloween and Christmas because OCT 31 = DEC 25

                                Kommentar

                                Lädt...
                                X