2 while schleifen

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

  • 2 while schleifen

    hi zusammen habe da ein kleine problem.

    Habe (siehe code unten) 2 while schleifen mit der 1. Lese ich alle Anfragen Datensätze aus und mit der 2. lese ich die dazugehörigen artikel aus und berechne sie. Einzel klappt dies auch nur leider wenn ich die 2 While schleifen in einander laufen lasse kommt mir für den $ar_netto_f leider was falsches raus.

    Ich will mir eine Art Liste der Anfragen ausgeben damit ich sie alle auf einen Blick sehe und dazu würde ich auch gern den Nettobetrag errechnen und ausgeben.

    Ist ziemlich komplex das ganze vielleicht kann mir ja wer helfen wäre echt prima. Danke

    PHP-Code:
    if (!$offset || $offset<0$offset 0
    $diff 25
    $step 25
    $sql_anf=mysql_query("SELECT count(*) FROM anf WHERE $s_anf"); 
    $anz mysql_result($sql_anf,0); 
    if (!
    $offset || $offset<0) { $offset 0$disabled[prev] = TRUE; } 
    if ((
    $offset $diff) >= $anz) { $diff $anz $offset$disabled[next] = TRUE;} 
    $anf_f=mysql_query("SELECT * FROM anf WHERE $s_anf ORDER BY $ordnen $rank LIMIT $offset,$diff"); 
    while (
    $row_anf mysql_fetch_array($anf_f))
    {
    $ang_nr=$row_anf[ang_nr];
    $auf_nr=$row_anf[auf_nr];
    $rech_nr=$row_anf[rech_nr];
    $bereiche=$row_anf[bereiche];
    $anf_status=$row_anf[anf_status];
    $ccode=$row_anf[ccode];

    $e_zeit=$row_anf[e_zeit];
    list(
    $e_j,$e_m,$e_tagtemp)=explode("-",$e_zeit);
    list(
    $e_t,$e_zeit)=explode(" ",$e_tagtemp);

    $sql_pos_anf=mysql_query("SELECT * FROM anf_pos WHERE anf_nr=$row_anf[anf_nr]") or die(mysql_error());
    while (
    $row_pos_anf=mysql_fetch_array($sql_pos_anf))        
    {                        
    $rabatt_pos=$row_pos_anf[art_rabatt]/100;
    $vk_preis=$row_pos_anf[vk_preis];
    $redpreis=$vk_preis*(1-$rabatt_pos);
    $zeilensumme=$row_pos_anf[menge]*$redpreis;                        
    $gesamt += $zeilensumme;    
    $art_rabatt=$row_pos_anf[art_rabatt];
    $menge=$row_pos_anf[menge];
    }
    $rabatt_end=$gesamt*$row_anf[rabatt]/100;
    $ar_netto=$gesamt-$rabatt_end;
    $ar_netto_f=number_format($ar_netto,2',''.');

    echo

    <table class=text border=0 cellspacing=0 cellpadding=0 onMouseover=changeto("#003366") onMouseout=changeback("#D3E5FA")>
        <tr>
            <td width="18"><img src="../../../images/1.gif" height="16" width="16" border="0"></td>
            <td width="18"><a href="'
    .$PHP_SELF.'?'.$sing_anf.'&offset='.($offset-$step).'&ordnen='.$ordnen.'&rank='.$rank.'&submit=ok&anf_id='.$row_anf[anf_nr].'&goto=1"><img src="../../../images/icon/detail.gif" alt="Zur Anfrage wechseln" height="16" width="16" border="0"></a></td>
            <td width="70"><input type="text" name="anf_nr" value="'
    .$row_anf[anf_nr].'" readonly size="9" border="0"></td>
            <td width="70"><input type="text" name="anf_date" value="'
    .$e_t.'.'.$e_m.'.'.$e_j.'" readonly size="9" border="0"></td>    
            <td width="153"><input type="text" name="firma" value="'
    .$row_anf[firma].'" readonly size="23" border="0"></td>
            <td width="45"><input type="text" name="firma" value="'
    ;ccode_x($ccode);echo'" readonly size="5" border="0"></td>
            <td width="148"><input type="text" name="bezeichnung" value="'
    .$row_anf[bezeichnung].'" readonly size="22" border="0"></td>
            <td width="100"><input type="text" name="bereiche" value="'
    ;bereiche_x($bereiche);echo'" readonly size="14" border="0"></td>
            <td width="125"><input type="text" name="anf_status" value="'
    ;status_anf_x($anf_status);echo'" readonly size="18" border="0"></td>
            <td width="125"><input type="text" name="ar_netto" value="'
    .$ar_netto_f.'" readonly size="18" border="0"></td>
            <td valign="middle" width="18"><div align="center">'
    ; if(isset($ang_nr)) {echo'<img src="../../../images/icon/ang.gif" height="16" width="16" border="0" alt="Angebot erstellt">';} echo'</div></td>
            <td valign="middle" width="18"><div align="center">'
    ; if(isset($auf_nr)) {echo'<img src="../../../images/icon/auf.gif" height="16" width="16" border="0" alt="Auftrag erstellt">';} echo'</div></td>
            <td valign="middle" width="18"><div align="center">'
    ; if(isset($rech_nr)) {echo'<img src="../../../images/icon/rech.gif" height="16" width="16" border="0" alt="Rechnung erstellt">';} echo'</div></td>            
        </tr>
    </table>
    '
    ;


  • #2
    1.
    ist deine zweite abfrage falsch
    PHP-Code:
    "SELECT * FROM anf WHERE $s_anf ORDER BY $ordnen $rank LIMIT $offset,$diff
    da steht kein vergleichswert in der WHERE-Kalusel

    2.
    überleg mal, ob es nicht einfacher und performanter ist einen join der beiden tabellen zu verwenden (falls das 2 unetreschiedliche tabellen sind vor den while's).
    aber eine "select" in einer schleife, solltest du auf jeden fall verhindert kriegen. das kann nicht gut sein.

    Kommentar


    • #3
      hi danke vorerst mal für deine Antwort.

      $s_anf ist ausgelagert sieht so aus:

      $s_anf="(anf_nr LIKE '%".$anf_nr."%') AND (firma LIKE '%".$firma."%') AND (bezeichnung LIKE '%".$bezeichnung."%') AND (bereiche LIKE '%".$bereiche."%') AND (anf_status LIKE '%".$anf_status."%')";

      das klappt auch nur ist das problem ist wahrscheinlich in der 2. while
      schleife hier addiert er einfach die beträge falsch keine ahnung warum ;-(

      muss sich doch irgendwie so lösen lassen

      Die anfragen einzelen eingesetzt kalppen auch prima also syntax fehler dürfte hier nicht vorliegen

      Kommentar


      • #4
        wie gesagt, nimm einen JOIN
        du kriegst in der ersten anfrage ein "anf_nr" und vergleichst diese mit der anf_nr in der 2. tabelle
        dann kannst du auch

        SELECT * FROM anf A LEFT JOIN anf_pos P USING(anf_nr) WHERE A.xxx LIKE .....

        schreiben und dir die 2. while schleife sparen

        Kommentar


        • #5
          danke für den tip geht das auch wenn in der 2. tabelle mehre anf_nr auf die erste anf_nr übereinstimmen

          das ganze ist eine art rechnugnssystem in der 1. sind die anfragen und in der 2. werden die positionen gespeichert sprich die artikel

          1. Tabellle

          anf_nr

          2. Tabelle sind die Artikel

          anf_nr | art_nr | beschreibung | ek_preis | rabatt
          ---------------------------------------------------------------
          1 | 2 | beschreibung | 23 | 10
          1 | 3 | beschreibung | 22 | 0
          2 | 3 | beschreibung | 22 | 0

          so sieht das schemo in kurzform aus und wie man sieht ist für anf_nr=1
          sind 2 Positionen vorhanden

          Kommentar


          • #6
            dann drehst du es einfach um

            SELECT * FROM anf_pos P LEFT JOIN anf A USING(anf_nr) WHERE A.xxx LIKE .....

            schau dir das ergebnis bspw. in phpMyAdmin an und du wirst sehen was dann zu tun ist

            Kommentar


            • #7
              danke schon mal werd ich mir dann gleich ansehen muss nur kurz einkaufen gehen

              lg

              Kommentar


              • #8
                so habs jetzt doch noch auf meine art hinbekommen habe nur $gesamt ausserhalb der schleife auf 0 setzen müssen da er ja ansonst beim nächsten durchlauf den alten wert noch hat und diesen dann dazu addiert

                danke trotzdem
                lg

                Kommentar


                • #9
                  wie gesagt, ich würde nie ein sql-abfrage in einer schleife ausführen, lieber würde ich mir gedanken um den aufbau der tabellen machen, wenn es anders nicht gehen sollte.

                  Kommentar

                  Lädt...
                  X