problem bei schleifendurchlauf

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

  • problem bei schleifendurchlauf

    hi,

    habe folgendes problem. ich lass mit einer while schleife meine mysql daten auslesen. bis hier absolut kein problem. sobald sich die ArtikelGruppe unterscheidet möchte ich, dass in der html ausgabe eine leere tabellenzeile ausgegeben wird. auch noch nicht das problem. selbes soll aber passieren wenn sich die untergruppe unterscheidet. und hier ist das problem. er durchläuft die schleife immer 1x zuviel, bis die leerzeile kommt. was wenn ich mir das ganze anguck auch sinn macht, da erst beim erneuten durchlauf der unterschied erkannt wird. ich hab aber jetzt irgendwie ne denkblockade wie ich das lösen kann. anbei bekommt ihr den Quelltext, um das geschriebene besser zu verstehen.

    PHP-Code:
    <table width="100%"  border="1" cellspacing="0" cellpadding="0">
    <?php
    include ("inc/connect.inc.php");
    $abfrage " SELECT GruppeName,uGruppeName,Beschreibung,Preis,artID
                            FROM ArtikelGruppe
                            inner join ArtikelUnterGruppe
                            on ArtikelGruppe.GrpID = ArtikelUnterGruppe.GruppenID
                            inner join Artikel
                            on ArtikelUnterGruppe.uGrpID = Artikel.UnterGruppenID ORDER BY
                            ArtikelGruppe.GrpID,ArtikelUnterGruppe.uGrpID,Artikel.artID desc"
    ;

    $aufgabe = @mysql_query($abfrage,$connect)or die (mysql_error());
    while (
    $row mysql_fetch_assoc($aufgabe)){

        if (
    $tmpGruppeName!=$row['GruppeName']){
        
    ?>
          <tr bgcolor="#0000FF">
            <td colspan="3"><?php echo $row['GruppeName']; ?></td>
          </tr>
          <?php
          
    }else{}
          
    ?>
          <tr>
            <td width="37%"><?php echo $row['uGruppeName']; ?></td>
            <td width="47%"><?php echo $row['Beschreibung']; ?></td>
            <td width="16%"><?php echo $row['Preis']; ?></td>
          </tr>
          <?php
          
    if (($tmpuGruppeName!=$row['uGruppeName']) and ($i!=0)){
          
    ?>
          <tr>
            <td colspan="3"><?php echo $i?></td>
          </tr>
         <?php
            
    }else{
            
    $i++;
            }
          
    $tmpuGruppeName $row['uGruppeName'];
          
    $tmpGruppeName $row['GruppeName'];
      
      }
      
    ?>
    </table>

  • #2
    Re: problem bei schleifendurchlauf

    wenn das prinzip des gruppenwechsels verstanden wurde, sollte es doch kein großes problem sein, diesen auch auf zwei ebenen/merkmale auszuweiten.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      der gruppenwechsel funktioniert ja auch ohne probleme nur der untergruppenwechsel nicht.

      Kommentar


      • #4
        Re: problem bei schleifendurchlauf

        na ja, im else-teil der abfrage auf den gruppennamen gibst du doch die daten zur untergruppe schon aus - und fragst erst danach ab, ob sich die untergruppe geändert hat ... da muss also wohl die reihenfolge von abfragen und ausgaben etwas sinnvoller gestaltet werden.
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          hmm is doch eigentlich logisch oder nicht? die untergruppe ändert sich ja erst in der gruppe

          Beispiel:
          Gruppe: Auto, Flugzeug

          Untergruppen von Auto: Räder, Motor, Lenkrad
          Untergruppe von Flugzeug: Flügel, Düse, Joystick

          Ergebnis:
          Auto:
          -> Räder: große Räder, kleine Räder, runde Räder
          -- Untergruppen-Unterschied --
          -> Motor: guter Motor, schlechter Motor
          -- Untergruppen-Unterschied --
          -> Lenkrad: Holzlenkrad, normales Lenkrad
          -- Gruppen-Unterschied --
          Flugzeug
          -> Flügel: große Flügel, kleine Flügel
          -- Untergruppen-Unterschied --
          -> Düse: 2 Strahler, 4 Strahler, Propeller
          -- Untergruppen-Unterschied --
          -> Jostik: riesen Joystick, kleiner Joystick, Lenkrad?!

          so soll es ausgegeben werden. Also entweder hab ich nen fehler in meiner Logik. was aber irgendwie nicht sein kann, da er den unterschied ja erkennt aber halt immer einen durchlauf zu spät oder ich raff hier irgendwas nicht

          Kommentar


          • #6
            du gibst den namen der gruppe ja auch erst dann aus, wenn sich der gruppenname geändert hat, warum meinst du, das bei der untergruppe rumdrehen zu können?
            Ich denke, also bin ich. - Einige sind trotzdem...

            Kommentar


            • #7
              die untergruppe soll ja auch immer ausgegeben werden. unabhänig davon, ob sie sich ändert oder nicht. nur die platzhalterzeile soll ausgegeben werden wenn sie sich die untergruppe ändert. das ergebniss würde dann so aussehen

              #1 -> funktioniert nicht richtig (immer einen durchlauf zu spät)
              #2 -> funktioniert genau so wie es soll

              Auto
              Räder: kleiner reifen
              Räder: goßer reifen
              -- Untergruppenplatzhalterzeile -- #1
              Motor: guter motor
              Motor: schlechter motor
              -- Untergruppenplatzhalterzeile --#1
              -- Gruppenplatzhalterzeile -- #2
              Flugzeug
              Flügel: kleine Flügel
              Flügel: goße Flügel
              -- Untergruppenplatzhalterzeile --#1
              Düse: 2 Strahler
              Düse: 4 Strahler
              -- Untergruppenplatzhalterzeile --#1
              -- Gruppenplatzhalterzeile --#2
              Zuletzt geändert von fanity; 14.12.2004, 15:26.

              Kommentar


              • #8
                Bei der Gruppe geht's
                bei der Untergruppe geht's nicht

                Bei der Gruppe prüfst du, ob der Name sich geändert hat, wenn ja gibst du ihn aus

                Bei der Untergruppe gibst du den Gruppennamen aus und prüfst dann, ob sich der Untergruppenname geändert hat

                Fällt dir nicht auf, dass die Reihenfolge unterschiedlich ist?
                Ich denke, also bin ich. - Einige sind trotzdem...

                Kommentar


                • #9
                  hmm entweder versteh ich es nicht oder ihr versteht mich falsch.

                  In worten was das script machen soll.

                  ist der gruppenname mit dem gruppenname des zuvor durchlaufenen schleifendurchlauf unterschiedlich dann gib den gruppennamen aus. sind sie gleich dann gib ihn nicht aus. Gehe dann weiter und vergleiche die Untergruppe mit der Untergruppe des zuvor durchlaufenen schleifendurchlaufs. unterscheiden sich die beiden untergruppennamen dann füge einen platzhalter ein und dann den datensatz. sind sie allerdings gleich dann schreiben den nächsten datensatz direkt drunter (ohne platzhalter).

                  das ganze visuell mit dem bug findet ihr unter
                  hier

                  Kommentar


                  • #10
                    Original geschrieben von fanity
                    hmm entweder versteh ich es nicht oder ihr versteht mich falsch.
                    ersteres

                    In worten was das script machen soll.
                    toll

                    ist der gruppenname mit dem gruppenname des zuvor durchlaufenen schleifendurchlauf unterschiedlich dann gib den gruppennamen aus. sind sie gleich dann gib ihn nicht aus.
                    si ist's richtig und so machst du's ja auch
                    Gehe dann weiter und vergleiche die Untergruppe mit der Untergruppe des zuvor durchlaufenen schleifendurchlaufs. unterscheiden sich die beiden untergruppennamen dann füge einen platzhalter ein und dann den datensatz. sind sie allerdings gleich dann schreiben den nächsten datensatz direkt drunter (ohne platzhalter).
                    so wäre es richtig, aber bist du dir sicher, dass dein code die untergruppennamen erst vergleicht und dann ausgibt?
                    Ich denke, also bin ich. - Einige sind trotzdem...

                    Kommentar


                    • #11
                      Gruppenvergleich
                      PHP-Code:
                      <?php
                      if ($tmpGruppeName!=$row['GruppeName']){
                          
                      ?>
                            <tr bgcolor="#0000FF">
                              <td colspan="3"><?php echo $row['GruppeName']; ?></td>
                            </tr>
                            <?php
                            
                      }else{}
                            
                      ?>
                      Untergruppenvergleich
                      PHP-Code:
                       <?php
                            
                      if (($tmpuGruppeName!=$row['uGruppeName']) and ($i!=0)){
                            
                      ?>
                            <tr>
                              <td colspan="3">&nbsp;</td>
                            </tr>
                           <?php
                              
                      }else{
                              
                      $i++;
                              }
                      ?>
                      mit dem $i fange ich den ersten durchlauf ab, da dort auf alle fälle ein unterschied besteht. und wenn ich mir das angucken sieht das ziemlich gleich aus

                      Kommentar


                      • #12
                        Original geschrieben von fanity
                        wenn ich mir das angucken sieht das ziemlich gleich aus
                        das ja, aber...
                        PHP-Code:
                        <?php
                        if ($tmpGruppeName!=$row['GruppeName']){
                            
                        ?>
                              <tr bgcolor="#0000FF">
                                <td colspan="3"><?php echo $row['GruppeName']; ?></td>
                              </tr>
                              <?php
                              
                        }else{}
                              
                        ?>
                        heißt: erst prüfen und dann ggf. ausgeben

                        das hingegen
                        PHP-Code:
                        <tr>
                                <td width="37%"><?php echo $row['uGruppeName']; ?></td>
                                <td width="47%"><?php echo $row['Beschreibung']; ?></td>
                                <td width="16%"><?php echo $row['Preis']; ?></td>
                              </tr>
                              <?php
                              
                        if (($tmpuGruppeName!=$row['uGruppeName']) and ($i!=0)){
                              
                        ?>
                              <tr>
                                <td colspan="3"><?php echo $i?></td>
                              </tr>
                             <?php
                                
                        }else{
                                
                        $i++;
                                }
                        heißt doch wohl: ausgeben und danach prüfen

                        oder nicht?
                        Ich denke, also bin ich. - Einige sind trotzdem...

                        Kommentar


                        • #13
                          ahh jetzt weiß ich wo wir vorbei geredet haben die Datensätze sollen immer ausgegeben werden nur derplatzhalter nicht deshalb frage ich ab: unterscheidet sich die untergruppe von der untergruppe davor. wenn dem so ist füge nur noch zusätzlich den platzhalter
                          ein. sind sie gleich mache nix, da die artikel ja zur selben untergruppe gehören und somit keinen platzhalter braucht.

                          das ist der platzhalter:
                          <tr>
                          <td colspan="3"><?php echo $i; ?></td>
                          </tr>

                          schau dir mal bitte den oben genannten link nochmal an. das ist das script wie es im moment steht. nur dass ich das echo $i entfernt habe. wie du siehst merkt er den unterschied und macht den platzhalter auch aber erst einen durchlauf zu spät.

                          Kommentar


                          • #14
                            ich hab verstanden was du vorhast, aber du wird es nicht (mehr heute) verstehen

                            du musst deinen platzhalter ausgeben, wenn sich die untergruppe ändert und es sich nich tum den allerersten eintrag handelt. das hast du auch richtig erkannt und umgesetzt, aber...
                            du gibst vor dieser prüfung schon daten zur untergruppe aus und das daf nicht sein

                            PHP-Code:
                            <table width="100%"  border="1" cellspacing="0" cellpadding="0">
                            <?php
                            include ("inc/connect.inc.php");
                            $abfrage " SELECT GruppeName,uGruppeName,Beschreibung,Preis,artID
                                                    FROM ArtikelGruppe
                                                    inner join ArtikelUnterGruppe
                                                    on ArtikelGruppe.GrpID = ArtikelUnterGruppe.GruppenID
                                                    inner join Artikel
                                                    on ArtikelUnterGruppe.uGrpID = Artikel.UnterGruppenID ORDER BY
                                                    ArtikelGruppe.GrpID,ArtikelUnterGruppe.uGrpID,Artikel.artID desc"
                            ;

                            $aufgabe = @mysql_query($abfrage,$connect)or die (mysql_error());
                            while (
                            $row mysql_fetch_assoc($aufgabe)){

                                if (
                            $tmpGruppeName!=$row['GruppeName']){
                                
                            ?>
                                  <tr bgcolor="#0000FF">
                                    <td colspan="3"><?php echo $row['GruppeName']; ?></td>
                                  </tr>
                                  <?php
                                  
                            }else{}
                                  
                            ?>
                                    <?php
                                  
                            if (($tmpuGruppeName!=$row['uGruppeName']) and ($i!=0)){
                                  
                            ?>
                                  <tr>
                                    <td colspan="3"><?php echo $i?></td>
                                  </tr>
                                 <?php
                                    
                            }else{
                                    
                            $i++;
                                    }
                            ?>
                                <tr>
                                    <td width="37%"><?php echo $row['uGruppeName']; ?></td>
                                    <td width="47%"><?php echo $row['Beschreibung']; ?></td>
                                    <td width="16%"><?php echo $row['Preis']; ?></td>
                                  </tr>
                            <?php
                                  $tmpuGruppeName 
                            $row['uGruppeName'];
                                  
                            $tmpGruppeName $row['GruppeName'];
                              
                             }
                              
                            ?>
                            </table>
                            hab deinen code einfach mal verschoben, so sollte es funktionieren

                            wenn es funktioniert, dann vergleich die beiden schnipsel und versuche zu verstehen, warum es bei dir nicht funktioniert hat
                            Ich denke, also bin ich. - Einige sind trotzdem...

                            Kommentar


                            • #15
                              Original geschrieben von fanity
                              wie du siehst merkt er den unterschied und macht den platzhalter auch aber erst einen durchlauf zu spät.
                              Der Platzhalter wird nicht einen Durchlauf zu spät, es liegt schlicht und ergreifend daran, dass du den Platzhalter schreibst nachdem du schon Daten der neuen Untergruppe ausgegeben hast.
                              Und das passiert, weil du erst ausgibst und danach schaust, ob du nicht erst einen Platzhalter hättest ausgeben sollen
                              Ich denke, also bin ich. - Einige sind trotzdem...

                              Kommentar

                              Lädt...
                              X