php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > SQL / Datenbanken
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden.

Antwort
 
LinkBack Themen-Optionen Thema bewerten
  #1 (permalink)  
Alt 29-08-2003, 22:23
churcher
 Registrierter Benutzer
Links : Onlinestatus : churcher ist offline
Registriert seit: Aug 2001
Beiträge: 245
churcher ist zur Zeit noch ein unbeschriebenes Blatt
Standard 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>
'
;

Mit Zitat antworten
  #2 (permalink)  
Alt 30-08-2003, 11:46
graf
 Senior Member
Links : Onlinestatus : graf ist offline
Registriert seit: Mar 2003
Ort: Hamburg
Beiträge: 529
graf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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.
Mit Zitat antworten
  #3 (permalink)  
Alt 30-08-2003, 12:05
churcher
 Registrierter Benutzer
Links : Onlinestatus : churcher ist offline
Registriert seit: Aug 2001
Beiträge: 245
churcher ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #4 (permalink)  
Alt 30-08-2003, 12:10
graf
 Senior Member
Links : Onlinestatus : graf ist offline
Registriert seit: Mar 2003
Ort: Hamburg
Beiträge: 529
graf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #5 (permalink)  
Alt 30-08-2003, 12:49
churcher
 Registrierter Benutzer
Links : Onlinestatus : churcher ist offline
Registriert seit: Aug 2001
Beiträge: 245
churcher ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #6 (permalink)  
Alt 30-08-2003, 13:12
graf
 Senior Member
Links : Onlinestatus : graf ist offline
Registriert seit: Mar 2003
Ort: Hamburg
Beiträge: 529
graf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #7 (permalink)  
Alt 30-08-2003, 13:20
churcher
 Registrierter Benutzer
Links : Onlinestatus : churcher ist offline
Registriert seit: Aug 2001
Beiträge: 245
churcher ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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

lg
Mit Zitat antworten
  #8 (permalink)  
Alt 30-08-2003, 21:13
churcher
 Registrierter Benutzer
Links : Onlinestatus : churcher ist offline
Registriert seit: Aug 2001
Beiträge: 245
churcher ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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
Mit Zitat antworten
  #9 (permalink)  
Alt 30-08-2003, 23:01
graf
 Senior Member
Links : Onlinestatus : graf ist offline
Registriert seit: Mar 2003
Ort: Hamburg
Beiträge: 529
graf ist zur Zeit noch ein unbeschriebenes Blatt
Standard

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.
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

Software für alle Arten von digitalen Marktplätzen
Software für alle Arten von digitalen MarktplätzenDigitale Marktplätze sind nicht nur im B2C Geschäft seit Jahren etabliert, sondern erfreuen sich mit Kleinanzeigen-Märkten auf lokaler und regionaler Ebene auch im privaten Bereich wachsender Beliebtheit.

09.11.2021 | Berni

Von 0 auf über 2 Mio € Umsatz in weniger als 12 Monaten – wie die Pixelwerker das nur durch SEO geschafft haben
Von 0 auf über 2 Mio € Umsatz in weniger als 12 Monaten – wie die Pixelwerker das nur durch SEO geschafft habenSEO oder SEA? Warum SEO die besserer Methode ist.

01.10.2021 | Berni


 

Aktuelle PHP Scripte

ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script ansehen ebiz-trader 6.0 - Das professionelle PHP Marktplatz Script

Mit unserer Lösungen können Sie nahezu jeden B2B / B2C Marktplatz betreiben den Sie sich vorstellen können. Ganz egal ob Sie einen Automarktplatz, Immobilenportal oder einfach einen Anzeigenmarkt betreiben möchten. Mit ebiz-trader können Sie Ihre Anforder

09.11.2021 Berni | Kategorie: PHP/ Anzeigenmarkt
PHP Newsletter Script SuperWebMailer ansehen PHP Newsletter Script SuperWebMailer

Die webbasierte PHP Newsletter Software SuperWebMailer ist die optimale Lösung zur Durchführung eines erfolgreichen E-Mail-Marketings. Zur Nutzung des PHP Script-Pakets ist eine eigene Webpräsenz/Server mit PHP 5 oder neuer, MySQL 4 oder neuer und die

28.10.2021 mirko_swm | Kategorie: PHP/ Mail
Guestbook Light ansehen Guestbook Light

Das Guestbook Light (kurz: "Gblight") ist ein kinderleichtes Gästebuch in PHP. Durch den Einsatz einer SQLite Datenbank ist es einfach, leicht portabel und schnell. Aufgrund moderner Techniken erfüllt Gblight auch die neuesten Webstandards.

28.10.2021 scripthostingnet | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 19:45 Uhr.