PHP/MySQL] Merkwürdiges Abfrage-Ergebnis

Moritz123

Erfahrenes Mitglied
Hallo!

ich habe mir zur Verwaltung meiner gearbeiteten Stunden ein kleines Script mit DB-Anbindunggeschrieben, dass diese erfasst. Desweiteren wird diese DB von meinem internen Kundenbereich abgefragt, so dass die Kunden nach Login die Möglichkeit haben, den aktuellen Stand ihres Kundenkontos abzufragen.
Die Daten werden dabei in der DB so gespeichert:
Code:
id | kunde | jahr | monat | tag | dienstleistung | stunden | satz | sonstiges | offen
Im Feld "offen" wird markiert, ob der Datensatz schon bezahlt ist, was natürlich monatsweise gesetzt wird.

Nun zum eig Problem:
Um dem Kunden eine Übersicht über die bereits bezahlten Monate mit Monats-Gesamtwert zu geben, verwende ich folgende Abfragen:
PHP:
$jahr_array = array();
			$monat_array = array();
			$abfrage = "SELECT DISTINCT jahr FROM stundenzettel WHERE kunde = '$_SESSION[sz_id]' AND offen = '0'";
			$ausgabe = mysql_query($abfrage);
			$num = mysql_num_rows($ausgabe);
			if ($num > 0) {while ($row = mysql_fetch_object($ausgabe)){
							array_push($jahr_array,$row->jahr);}}
				for($a=0; $a<count($jahr_array); $a++){
					$abfrage2 = "SELECT DISTINCT monat FROM stundenzettel WHERE kunde = '$_SESSION[sz_id]' AND jahr = '$jahr_array[$a]' AND offen = '0'";
					$ausgabe2 = mysql_query($abfrage2);
					$num2 = mysql_num_rows($ausgabe2);
					if ($num2 > 0) {while ($row2 = mysql_fetch_object($ausgabe2)){
							array_push($monat_array,$row2->monat);}}
						for($b=0; $b<count($monat_array); $b++){
						$summe2 = 0;
							$abfrage3 = "SELECT * FROM stundenzettel WHERE kunde = '$_SESSION[sz_id]' AND jahr = '$jahr_array[$a]' AND monat = '$monat_array[$b]' AND offen = '0'";
							echo $abfrage3 . "<br>";
							echo $jahr_array[$a] . "<br>";
							$ausgabe3 = mysql_query($abfrage3);
							$num3 = mysql_num_rows($ausgabe3);
							if ($num3 > 0) {while ($row3 = mysql_fetch_object($ausgabe3)){
								$wert2 = $row3->stunden * $row3->satz;
								$summe2 = $summe2 + $wert2;

Leider erhalte ich dabei folgendes Ergebnis:
Code:
Jahr | Monat | Wert 
===================  
2005 | Februar | 595 € 
----------------------
2005 | Januar  | 595 €
----------------------
2004 | Februar | 270 € 
----------------------
2004 | Februar | 270 €
Der letzte Datensatz wird doppelt ausgegeben. Ich habe nun schon alles durchprobiert - komme aber zu keinem vernünftigen Ergebnis.

Also habe ich mir mal Abfrage3 ausgeben lassen:
Code:
SELECT * FROM stundenzettel WHERE kunde = 'XYZ' AND jahr = '2005' AND monat = '02' AND offen = '0'

SELECT * FROM stundenzettel WHERE kunde = 'XYZ' AND jahr = '2005' AND monat = '01' AND offen = '0'

SELECT * FROM stundenzettel WHERE kunde = 'XYZ' AND jahr = '2004' AND monat = '02' AND offen = '0'

SELECT * FROM stundenzettel WHERE kunde = 'XYZ' AND jahr = '2004' AND monat = '01' AND offen = '0'

SELECT * FROM stundenzettel WHERE kunde = 'XYZ' AND jahr = '2004' AND monat = '02' AND offen = '0'

Leider gibt mir das auch keinen entscheidenden Hinweis auf den Fehler.
Ich würde mich super freuen, wenn Ihr mir daher weiterhelfen könnt.

Vielen Dank und eine schöne Woche!
 
Ist folgendes SQL-Statement nicht weitaus praktischer?
PHP:
$sql = "select jahr, monat, sum(stunden*satz)
        from stundenzettel
        where kunde = '".$_SESSION['sz_id']."'
        group by jahr, monat";
 
Danke für deine Antwort!

Habe meine Query jetzt angepasst - wie kann ich das Ergebnis von sum(stunden*staz) ausgeben?
 
Zuletzt bearbeitet:
PHP:
$sql = "select jahr, monat, sum(stunden*satz) as WERT
        from stundenzettel
        where kunde = '".$_SESSION['sz_id']."'
        group by jahr, monat"; 
$qry = mysql_query($sql) or die(mysql_error());
while ($ds = mysql_fetch_array($qry)) {
  echo $ds['WERT'];
}
 

Neue Beiträge

Zurück