Andy: while ein DS weniger

Hallo,

meine Abfrage

  
$query_erg = "SELECT bezeichnung FROM namen";  
$erg= @mysql_query($query_erg)or die("Abfrage fehlgeschlagen");  
$row_erg = mysql_fetch_assoc($erg);  
$totalRows_erg = mysql_num_rows($erg);  

meine Schleife

  
while ($row_erg = mysql_fetch_assoc($erg)){  
echo $row_erg['fremd_bez'].'<br>';  
 }  

gibt mir einen Datensatz weniger zurück als ich brauche, weil ich
$row_erg = mysql_fetch_assoc($erg); schon angegeben habe.
Wäre in dem Falle eine do/while die Lösung?
Was spricht dagegen?

Danke
Andy

  1. Hallo Andy,

    gibt mir einen Datensatz weniger zurück als ich brauche, weil ich
    $row_erg = mysql_fetch_assoc($erg); schon angegeben habe.
    Wäre in dem Falle eine do/while die Lösung?

    nicht unbedingt.

    Was spricht dagegen?

    Was spricht dagegen, den ersten mysql_fetch_assoc()-Aufruf einfach wegzulassen?

    Freundliche Grüße

    Vinzenz

    1. Was spricht dagegen, den ersten mysql_fetch_assoc()-Aufruf einfach wegzulassen?

      Hallo Vinzenz,

      in diesem Falle nicht, ich habe mir das eigentlich nur so angewöhnt, da ich manchmal Abfrageergebnisse auch ohne Do/while nutzen musste.
      Dann war der erste mysql_fetch_assoc()-Aufruf eben immer da und ich musste nicht nachdenken habe ich oder nicht.
      Allerdings habe ich immer do/while benutzt.

      Ich weiß nicht, was soll man (wann) nehmen und warum.

      while($row_erg = mysql_fetch_assoc($erg)) {  
      ....  
      }
      

      oder

      do {  
      ...  
      }while($row_erg = mysql_fetch_assoc($erg));
      

      Vielen Dank
      Andy

      1. Hallo,

        Was spricht dagegen, den ersten mysql_fetch_assoc()-Aufruf einfach wegzulassen?

        in diesem Falle nicht, ich habe mir das eigentlich nur so angewöhnt, da ich manchmal Abfrageergebnisse auch ohne Do/while nutzen musste.
        Dann war der erste mysql_fetch_assoc()-Aufruf eben immer da und ich musste nicht nachdenken habe ich oder nicht.

        ach ja. Das ist eine schlechte Idee.

        Ich weiß nicht, was soll man (wann) nehmen und warum.

        while($row_erg = mysql_fetch_assoc($erg)) {

        ....
        }

          
        Da Abfragen stets eine leere Menge zurückliefern können, ohne dass dies einen Fehler darstellt, ist bei der Verarbeitung von Abfrageergebnissen die while-Schleife sinnvoll - und do-while mit unnötigem zusätzlichen Aufwand verbunden.  
          
        Solange es Datensätze gibt  
            Verarbeite diese Datensätze  
        Ende Solange  
          
          
          
        Freundliche Grüße  
          
        Vinzenz
        
      2. Moin!

        Ich weiß nicht, was soll man (wann) nehmen und warum.

        Das ergibt sich aus der Logik der Aufgabe.

        while($row_erg = mysql_fetch_assoc($erg)) {

        ....
        }

          
        Wenn du innerhalb der Schleife das DB-Ergebnis verarbeiten willst, das im while-Statement abgefragt wird, bietet sich diese Schleife an.  
          
        
        > oder  
        >   
        > ~~~php
        
        do {  
        
        > ...  
        > }while($row_erg = mysql_fetch_assoc($erg));
        
        

        Wenn du in der Schleife etwas tun willst, und am Ende wird das DB-Ergebnis abgefragt (und steht ggf. im nächsten Schleifendurchlauf zur Verfügung), wäre diese Schleife angesagt.

        Da es aber allgemein unsinnig ist, bei einer Datenbankabfrage zuerst etwas zu tun und dann erst die Datenbank abzufragen, weil man in der Regel das Abfrageergebnis innerhalb der Schleife verarbeiten will, ist es üblich, die while-Schleife ganz oben zu verwenden.

        Du tust dir keinen Gefallen, wenn du das anders machst.

        - Sven Rautenberg

        --
        "Love your nation - respect the others."