Zahlen aus mehreren Spalten addieren

Asche über mein Haupt. Manchmal sind es die kleinen Dinge im Leben die Ausgaben verhindern.

Nur wieso gibt er mir jetzt immer den Status "B" aus?

Habs schon versucht mit einer List aber das ist ihm egal.

PHP:
if($row = mysql_fetch_assoc($ergebnis))
{
  if($row['summe'] > 5000)
  {
    $status = "A";
  }
  else if($row['summe'] >= 350)
  {
    $status = "B";
  }
  else if($row['summe'] < 350)
  {
    $status = "C";
  }
  {
	  }
}

Edith sagt: Ich glaube er nimmt nen Durchschnitt. Hab mal Testweise bei einem DS 7000 eingegeben und schwupps haben alle den Status "A"
 
Zuletzt bearbeitet:
Wer ist "er"? PHP ist rein logisch. Wenn du im Datensatz 7000 drin stehen hast, ist das größer als 5000. Folglich kommt "A" raus. Möglicherweise ist dein SQL nicht ganz das, was du eigentlich haben willst. Ich bin mir grad nicht so ganz sicher, ob das GROUP BY im Vorschlag von BaseBallBatBoy richtig ist. Beim Gruppieren von Datensätzen gehen Informationen "verloren". Ich würde es mal weg lassen.
 
Er=Computer=Datenbank=Script=dieses etwas aus Nullen und Einsen.

Ja wenn ich das GROUP BY weg lasse, wird mir nichts mehr angezeigt.

PHP:
$sql = "SELECT SUM(tbl_preise.kd_preis1 + tbl_preise.kd_preis2 + tbl_preise.kd_preis3 + tbl_preise.kd_preis4 + tbl_preise.kd_preis5 + tbl_preise.kd_preis6 + tbl_preise.kd_preis7 + tbl_preise.kd_preis8 + tbl_preise.kd_preis9 + tbl_preise.kd_preis10) AS summe,
			tbl_kunden.kd_nr, tbl_kunden.kd_name, tbl_kunden.kd_vorname, tbl_preise.kd_preis_nr
    		FROM tbl_kunden
			INNER JOIN tbl_preise
			ON tbl_kunden.kd_nr = tbl_preise.kd_preis_nr
			GROUP BY kd_name
            ORDER BY summe DESC, kd_name ASC";

$ergebnis = mysql_query($sql)
OR die("Error: $ergebnis <br>".mysql_error());

if($row = mysql_fetch_assoc($ergebnis))
{
  if($row['summe'] > 5000)
  {
    $status = "A";
  }
  else if($row['summe'] >= 350)
  {
    $status = "B";
  }
  else if($row['summe'] < 350)
  {
    $status = "C";
  }
  {
	  }
}

Dann die Tabelle
und der Rest vom Code
PHP:
while($row = mysql_fetch_assoc($ergebnis))
 {

     echo "<tr>";
     echo "<td>". $row['summe'] . "</td>";
	 echo "<td>". $status . "</td>";
	 echo "<td>". $row['kd_vorname'] . "</td>";
	 echo "<td>". $row['kd_name'] . "</td>";
	 echo "</tr>";
	echo $row->Spaltenname;
   }
 
Ich bin jetzt nicht der PHP Crack, aber ich kann mit Bestimmtheit sagen, dass du den if-then-else Teil innerhalb des while-loop haben musst. Der soll das ja mit jedem einzelnen Record machen.

Und nein, du kannst nicht einfach hingehen und wahllos group by's rauslöschen. Die haben schon einen Zweck. Alles was im select ist und keine Aggregatsfunktion ist (wie z.B. sum) muss im group by stehen.

Hast du dir das Ergebnis des SQL mal als Tabelle angeschaut? Entspricht es dem was du haben willst? (Zwischenfrage, warum gibst du kd_nr und kd_preis_nr aus, wenn du die in der PHP-Tabelle dann sowieso nicht brauchts?)
Falls das SQL macht was du brauchst, würde ich für meinen Teil diese Statusgeschichte gleich da erledigen:
SQL:
....
CASE
   WHEN sum(....) > 5000 THEN 'A'
   WHEN sum(...) <= 5000 AND sum(...) >= 350 THEN 'B'
   ELSE 'C'
END AS status,
....
 
Zuletzt bearbeitet von einem Moderator:
Wir haben etwas gemeinsam. Bin auch kein PHP Crack. Naja ich versuche zumindest die Dinge zu verstehen und umzusetzten.

Nur zum Verständnis:

Kommt der von dir geschriebene Teil dann hier hin?
PHP:
while($row = mysql_fetch_assoc($ergebnis))
 {
CASE
   WHEN SUM(kd_nr) > 5000 THEN 'A' //oder was muss in die Klammer?
   WHEN SUM(kd_nr) <= 5000 AND SUM(...) >= 350 THEN 'B'
   ELSE 'C'
END AS STATUS,

     echo "<tr>";
     echo "<td>". $row['summe'] . "</td>";
     echo "<td>". $status . "</td>";
     echo "<td>". $row['kd_vorname'] . "</td>";
     echo "<td>". $row['kd_name'] . "</td>";
     echo "</tr>";
    echo $row->Spaltenname;
   }
 
Nein, es steht ja "Code sql". Ich habe ja geschrieben ich würde das da, also im sql machen. Das kommt also in dein select sql statement rein. Dann hast du da eine weitere Spalte "status" mit der Info.

Oder aber wenn du es in PHP machen willst, nimmst das if-then-else (if($row['summe'] > 5000).....) von saftmeister und packst das dort hin, wo du jetzt fälschlicherweise den sql code hingeschrieben hast. Damit wird in jedem loop der status neu ermittelt.
 
Oh man. nun bin ich total verwirrt.
Also ich würde das ganze gern in php machen.

Nochmal langsam. Ich habe ja meine if-else Geschichte.
PHP:
if($row = mysql_fetch_assoc($ergebnis))
{
  if($row['summe'] > 5000)
  {
    $status = "A";
	
  }
  else if($row['summe'] >= 350)
  {
    $status = "B";
  }
  else if($row['summe'] < 350)
  {
    $status = "C";
  }
Ist der Case nicht das selbe? Hab einige Dinge gelesen und überall wird von entweder/oder gesprochen.

Also wie sollte ich das denn Umsetzen?
 
also PHP:

PHP:
while($row = mysql_fetch_assoc($ergebnis))
 {
  if($row['summe'] > 5000)
  {
    $status = "A";
    
  }
  else if($row['summe'] >= 350)
  {
    $status = "B";
  }
  else if($row['summe'] < 350)
  {
    $status = "C";
  }  

     echo "<tr>";
     echo "<td>". $row['summe'] . "</td>";
     echo "<td>". $status . "</td>";
     echo "<td>". $row['kd_vorname'] . "</td>";
     echo "<td>". $row['kd_name'] . "</td>";
     echo "</tr>";
    echo $row->Spaltenname;
   }
 
Gut. Ich bekomme ein Ergebnis. Jedoch bekomme ich nun eine Gesamtsumme über alle Preise die mir zu dem ersten Datensatz (kd_nr 1) ausgegeben werden.
PHP:
<?php

$status = "SELECT SUM(tbl_preise.kd_preis1 + tbl_preise.kd_preis2 + tbl_preise.kd_preis3 + tbl_preise.kd_preis4 + tbl_preise.kd_preis5 + tbl_preise.kd_preis6 + tbl_preise.kd_preis7 + tbl_preise.kd_preis8 + tbl_preise.kd_preis9 + tbl_preise.kd_preis10) AS summe,
			tbl_kunden.kd_nr, tbl_kunden.kd_name, tbl_kunden.kd_vorname, tbl_preise.kd_preis_nr
    		FROM tbl_kunden
			INNER JOIN tbl_preise
			ON tbl_kunden.kd_nr = tbl_preise.kd_preis_nr
			GROUP BY kd_name
            ORDER BY summe DESC, kd_name ASC";

$ergebnis = mysql_query($status)
OR die("Error: $ergebnis <br>".mysql_error());

if(isset($ergebnis))
{ 
}else {
echo "Error";
}
?>

<table>
<tr>
    <th>Summe</th>
	<th>Status</th>
    <th>Vorname</th>
    <th>Name</th>
</tr>

<?php
while($row = mysql_fetch_assoc($ergebnis)) 
 { 
  if($row['summe'] > 5000) 
  { 
    $status = "A"; 
     
  } 
  else if($row['summe'] >= 350) 
  { 
    $status = "B"; 
  } 
  else if($row['summe'] < 350) 
  { 
    $status = "C"; 
  }   

     echo "<tr>"; 
     echo "<td>". $row['summe'] . "</td>"; 
     echo "<td>". $status . "</td>"; 
     echo "<td>". $row['kd_vorname'] . "</td>"; 
     echo "<td>". $row['kd_name'] . "</td>"; 
     echo "</tr>"; 
    echo $row->Spaltenname; 
   }  
?>
 
Zurück