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, 21: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
freelancermap.de - IT Projektvermittlung für Selbständige und Freiberufler
  #2 (permalink)  
Alt 30-08-2003, 10: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, 11: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, 11: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, 11: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, 12: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, 12: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, 20: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, 22: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

PHP Marktplatz-Software
PHP Marktplatz-SoftwareEs hat sich viel getan! Die neue Version 7.5.9 unserer PHP Marktplatz-Software ebiz-trader steht ab sofort zur Verfügung.

28.10.2019 | Berni

Die RIGID-FLEX-Technologie
Die RIGID-FLEX-TechnologieDie sogenannte "Flexible Elektronik" , oftmals auch als "Flexible Schaltungen" bezeichnet, ist eine zeitgemäße Technologie zum Montieren von elektronischen Schaltungen.

06.12.2018 | Berni


 

Aktuelle PHP Scripte

SMT

Server Monitoring & Management Tool Das SMT wurde von einem Administrator für Administratoren entwickelt, es vereinfacht den Alltag in der klassischen Administration und Verwaltung. Mit dem SMT kannst Du alle Deine Server & Dienste verwalten und überwach

04.09.2020 palle_1977 | Kategorie: PHP
numaeks Web-Farbmixer

Die RGB-Farben lassen sich hier auf unterschiedliche Weise mischen. Zur Einstellung werden auch die Dreh- und Schieberegler mit Canvas verwendet. Gespeichert werden die Farben in einem Cookie.

04.09.2020 numaek | Kategorie: JAVASCRIPT/ Tools
phplinX-Erotikportal 4 ansehen phplinX-Erotikportal 4

Erweiterbares Portal speziell für Erotik mit den Modulen Webkatalog, Bannermanagement und Kleinanzeigenmarkt. Sämtliche Module können über einen einzigen Adminbereich verwaltet werden.

18.06.2020 Cosinus14 | Kategorie: PHP/ Anzeigenmarkt
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 00:24 Uhr.