Summe nicht in jede zeile schreiben(php,mysql)

DarkZeratul

Grünschnabel
Hallo Leute, ich bin hier neu und habe da noch nicht so die Ahnung.
Also ich schildere mal kurz mein Problem:

Ich habe eine Tabele, in der werden die Daten aus einem Array, das ich vorher erstelle, eingetragen. Die Daten bestehen aus Preisen und Nummern. Nun habe ich natürlich einige Nummer mehrmals und möchte davon eine Zwischensumme haben.
Beispiel:
Code:
Kostenstellen	Rufnummern	Einzelbetrag	Gesamtbetrag
10602           xxxxxxxxxxx           93.63          104.65  <-- Dieser Wert soll nicht angezeigt werden
10602           xxxxxxxxxxx           11.02          104.65  
10603           xxxxxxxxxxx           43.39           43.39  
10604           xxxxxxxxxxx           71.87           71.87

So, das Problem ist Folgendes: Ich lasse, wenn die Kostenstellen gleich sind, eine Zwischensumme errechen, will sie aber nur beim letzten Eintrag angezeigt bekommen. Aber egal was ich probiere, es geht nicht.
Kann mir dabei einer helfen?
 
So sieht das script momentan aus:

PHP:
<?php
require_once('./config/db.inc.php');
// Die Übergeben Variable auslesen
if (isset($_REQUEST["nl_id"])) $nl_id = $_REQUEST["nl_id"];

.
.
.
.
//Auslesen der Niederlassungsdaten aus der Datenbank.
	$sql1 = "SELECT Ansch FROM nl WHERE id = \"".$nl_id."\"";
	$result = mysql_query($sql1, $link)
		or die ("Es ist ein Fehler aufgetreten!<br> FEHLER-Nr.:".mysql_errno($link)."<br>Fehler:".mysql_error($link)."<br>");
		while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) {	// die Funktion wird solange ausgeführt bis keine einträge mehr gefunden werden
			
	$Name = $row["Ansch"];
}
print "<br />";
print "Ihre Kostenübersicht für  $date  für den  $Name";
?>
<center>
<br /><br />
	<table class="rundrum" width="520px">
	<tr>
			<td align="center" valign="top" width="100px">
			<b>Kostenstellen</b>
			</td>
			
			<td align="center" valign="top" width="180px">
			<b>Rufnummern</b>
			</td>
			
			<td align="center" valign="top" width="100px">
			<b>Einzelbetrag <br />(in Euro)</b>
			</td>
			
			<td align="center" valign="top" width="120px">
			<b>Gesamtbetrag <br /> (in Euro)</b>
			</td>
		
		</tr>
	</table>
</center>
 
<?php
	//suchen der Daten de Ausgewählten Niederlassung
	$sql = "select kostenstelle,telefon,pos.Ng ,sum(pos.Ng) As Ges from tel left join pos on telefon = pos.Ans where nl_id =" . $nl_id . " group by telefon order by kostenstelle";
		$result = mysql_query($sql, $link)
		or die ("Es ist ein Fehler aufgetreten!<br> FEHLER-Nr.:".mysql_errno($link)."<br>Fehler:".mysql_error($link)."<br>");
			while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
					
					$pos_data[$i][0] = $row["kostenstelle"];
					$pos_data[$i][1] = $row["telefon"];
					$pos_data[$i][2] = sprintf("%01.2f",$row["Ges"]);
					
?>
<center>
	
	<table class="rundrum" width="520px">
		
		<tr>
			<td align="left" valign="top" width="100px">
			<?php Print $pos_data[$i][0]; ?>
			</td>
			
			<td align="center" valign="top" width="180px">
			<?php Print $pos_data[$i][1]; ?>
			</td>
			
			<td align="right" valign="top" width="100px">
			<?php Print $pos_data[$i][2]; ?>&nbsp;&nbsp;&nbsp;&nbsp;
			</td>
		<?php
	$sql2 = "select kostenstelle,sum(pos.Ng) As Ges from tel left join pos on telefon = pos.Ans where nl_id =" . $nl_id . " group by kostenstelle";
		$result2 = mysql_query($sql2, $link)
		or die ("Es ist ein Fehler aufgetreten!<br> FEHLER-Nr.:".mysql_errno($link)."<br>Fehler:".mysql_error($link)."<br>");
			while ($row2 = mysql_fetch_array($result2,MYSQL_ASSOC)) {
					$ges_data[$j][0] = $row2["kostenstelle"];
					$ges_data[$j][1] = $row2["Ges"];
				
			if ($pos_data[$i][0] == $ges_data[$j][0]) {
			?>
			<td align="right" valign="buttom" width="100px">
			<br /><b><?php Print $ges_data[$i][1]; ?></b>
			</td>
	<?php

$j++;
				}
			
}
?>
		</tr>
	</table>
</center>

  <?php
$i++;
}
?>
 
Du müsstest die Werte vorher in einem Array speichern und für die Ausgabe jeweils den nächsten Datensatz mit berücksichtigen. Probier mal Folgendes:
PHP:
<?php

	require_once './config/db.inc.php';

	// die übergeben Variable prüfen
	if( isset($_REQUEST['nl_id']) ) {
		$nl_id = $_REQUEST['nl_id'];
	}

	// Abfrage der Niederlassungsdaten aus der Datenbank
	$query = '
		SELECT
		        `Ansch`
		  FROM
		        `nl`
		  WHERE
		        `id` = "'.intval($nl_id).'"
		';
	$result = mysql_query($query, $link)
		or die('<p>Es ist ein Fehler aufgetreten!<br>Fehler-Code: '.mysql_errno($link).'<br>Fehlerbeschreibung: '.mysql_error($link).'</p>');
	$row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
	echo '<h2>Ihre Kostenübersicht vom '.$date.' für den '.$row['Ansch'].'</h2>';

?>
<table>
	<tr>
		<th>Kostenstellen</th>
		<th>Rufnummern</th>
		<th>Einzelbetrag (in Euro)</th>
		<th>Gesamtbetrag (in Euro)</th>
	</tr>  
<?php 

	$query = '
		SELECT
		        `kostenstelle`,
		        `telefon`,
		        `pos`.`Ng` AS `einzelbetrag`,
		        SUM(`pos`.`Ng`) AS `gesamtbetrag`
		  FROM
		        `tel` LEFT JOIN `pos` ON `telefon` = `pos`.`Ans`
		  WHERE
		        `nl_id` = '.intval($nl_id).'
		  GROUP BY
		        `telefon`
		  ORDER BY
		        `kostenstelle`
		';
	$result = mysql_query($query, $link)
		or die('<p>Es ist ein Fehler aufgetreten!<br>Fehler-Code: '.mysql_errno($link).'<br>Fehlerbeschreibung: '.mysql_error($link).'</p>');
	$tmp = array();
	while( $row = mysql_fetch_array($result, MYSQL_ASSOC) ) {
		$tmp[] = $row;
	}
	foreach( $tmp as $key => $row ) {
?>
	<tr>
		<td><?php echo $row['kostenstelle']; ?></td>
		<td><?php echo $row['telefon']; ?></td>
		<td><?php echo sprintf('%01.2f', $row['einzelbetrag']); ?></td>
		<td><?php if( !isset($tmp[$key+1]) || $tmp[$key+1]['kostenstelle'] != $row['kostenstelle'] ) echo sprintf('%01.2f', $row['gesamtbetrag']); ?></td>
	</tr>
<?php
	}
?>
</table>
 
Fatal error: Call to undefined function sprintr() in C:\apachefriends\xampp\htdocs\xxx\zusa.php on line 61

foreach( $tmp as $key => $row ) {
?>
<tr>
<td><?php echo $row['kostenstelle']; ?></td>
<td><?php echo $row['telefon']; ?></td>
<td><?php echo sprintf('%01.2f', $row['einzelbetrag']); ?></td>
<td><?php if( !isset($tmp[$key+1]) || $tmp[$key+1]['kostenstelle'] != $row['kostenstelle'] ) echo sprintr('%01.2f', $row['gesamtbetrag']); ?></td>
</tr>
<?php
}
Das währe dann diese funktion.
Aber sonst sieht es schonmal nicht verkehrt aus.

Habe das mal etwas verbessert es muss sprintf heisen^^.
Hab nur noch ein problem nur berechnet er es nicht richtig.
Die werte sind nicht die die sie sein sollen.
Kann es sein das er da irgendwie die werte vertauscht oder so?

Dank für deine hilfe
 
Zuletzt bearbeitet:
Tippfehler: Die gemeinte Funktion heißt sprintf(). Darauf hättest du aber auch kommen können. Meinen vorherigen Beitrag habe ich entsprechend korrigiert.
 
Ja hab ich auch schon von allein korregiert^^

Nun ist halt das problem das er falsche werte präsentiert kann es sein das das array die irgendwie nicht richtig zusammen zählt und dann in die falsche zeile schreibt?


mfg
 
So Das ist der geändert script ablauf.
Es Funtzt schon ganz gut nur ist da noch ein Problem wenn die Kostenstellen nicht gleich sind soll er ja nur den einzelbetrag bringen nicht mehr.
Das Script rechnet aber denoch den vorherigen und den aktuelen zusammen.
Auch berechtet er max zwei einträge wenn ich nun aber 4 oder 5 mit der selben Kostenstelle habe bekomme ich nur da sergebnis der letzten beiden.

Weis da einer rat?
PHP:
<?php
	//suchen der Daten de Ausgewählten Niederlassung
	$sql = "select kostenstelle,telefon,sum(pos.Ng) As gesamtbetrag from tel left join pos on telefon = pos.Ans where nl_id =" . $nl_id . " group by telefon order by kostenstelle";
		$result = mysql_query($sql, $link)
		or die ("Es ist ein Fehler aufgetreten!<br> FEHLER-Nr.:".mysql_errno($link)."<br>Fehler:".mysql_error($link)."<br>");
		$tmp = array();
			while ($row = mysql_fetch_array($result,MYSQL_ASSOC)) {
				$tmp[] = $row;
			}
		foreach( $tmp as $key => $row ) {	
					
					
?>
<center>
	
	<table class="druckver" width="640px">
		
     <tr>
     		<td align="left" valign="top" width="160px">
			<?php print $row['kostenstelle']; ?>
		</td>
       		<td align="left" valign="top" width="220px">
			<?php print $row['telefon']; ?>
		</td>
        	<td align="center" valign="top" width="140px">
			<?php print sprintf('%01.2f', $row['gesamtbetrag']); ?>
		</td>
        	<td align="center" valign="top" width="140px">
        		<?php if ( isset($tmp[$key+1]) || $tmp[$key+1]['kostenstelle'] == $row['kostenstelle'] ) 
        			$gesamt = ($tmp[$key-1]['gesamtbetrag'] + $tmp[$key]['gesamtbetrag']);
					else
						$gesamt =($tmp[$key]['gesamtbetrag']);
			
			if( !isset($tmp[$key+1]) || $tmp[$key+1]['kostenstelle'] !== $row['kostenstelle'] ) print sprintf('%01.2f', $gesamt); ?>
		</td>
       
    </tr>
	</table>
</center>

  <?php

}
?>
</body>
 
Zurück