Alex S.: Aus Mysql Query SUM() über Variable in PHP ausgebe`n?

Hallo ich bins wieder ;-)

habe folgenden query:

SELECT wer,wann,wofuer,sum(wieviel) AS summe FROM eigenleistungen GROUP BY wer

was muss ich dann in meiner php while schleife für die ausgabe als variable ausgeben?

$var[wer], $var[wann] etc.ist ja kein problem - aber wenn ich versuchce $var[summe] zu nehmen klappt das nicht - warum nicht?
Er gibt alle Werte korrekt aus ausser summe: hier noch mal der komplette sourcecode:

function modul1_zeigen() {
require "configs.php";

$link = mysql_connect($dbhost, $dbuser, $dbpass)
        or die ("Could not connect");
          mysql_select_db ($dbname)
        or die ("Could not select database");

$query="SELECT *,sum(wieviel) AS summe FROM " . $suffix . $modul1 . $order . " GROUP BY wer";
         $result = mysql_query ($query)
             or die ("Query failed");

print "<b>$titel1</b><br><br>
<table class='$modul1_table_zeigen'>
<tr>
<td class='$modul1_thead_zeigen'><font class='$modul1_thead_font_zeigen'>ID</td>
<td class='$modul1_thead_zeigen'><font class='$modul1_thead_font_zeigen'>Wer</td>
<td class='$modul1_thead_zeigen'><font class='$modul1_thead_font_zeigen'>Wieviel</td>
<td class='$modul1_thead_zeigen'><font class='$modul1_thead_font_zeigen'>Wofür</td>
<td class='$modul1_thead_zeigen'><font class='$modul1_thead_font_zeigen'>Wann</td>
<td class='$modul1_thead_zeigen'><font class='$modul1_thead_font_zeigen'>Ändern</td>
<td class='$modul1_thead_zeigen'><font class='$modul1_thead_font_zeigen'>Löschen</td>
</tr>

";

while($line = mysql_fetch_array($result))
{
print "<tr>
<td>$line[id]</td>
<td>$line[wer]</td>
<td>$line[wieviel]</td>
<td>$line[wofuer]</td>
<td>$line[wann]</td>
<td>a href='?modul=$modul1&aktion=aendern&id=$line[id]'><img src='img/edit.gif' border='0' alt='Ändern'></a></td>
<td><a href='?modul=$modul1&aktion=loeschen&id=$line[id]' onClick="return confirm('Möchten Sie den Eintrag mit der ID $line[id] wirklich löschen?')"><img src='img/trash.gif' border='0' alt='Löschen'></a></td></tr>";

}

print "<td colspan='2'>Insgesamte Kosten</td>
  <td>$preis_insgesamt</td>
  <td colspan='4'>$line[summe]</td>";

mysql_close($link);
 print "</table>";
}

  1. Hi Alex,

    PHP sieht für den Index eines Arrays die Verwendung der Datentypen Integer oder String vor. Da Du in den eckigen Klammern weder einen Integerwert noch eine Variable aufführst, muß es sich um Konstanten handeln; Dein Beispiel läßt jedoch erahnen, daß Du keine derartigen Konstanten definiert hast. Daher solltest Du dem Interpreter die Konstanten für die Indexwerte bekannt machen oder die Indize - was eher Deine Absicht zu sein scheint - auch als Stringliterale notieren!

    SELECT wer,wann,wofuer,sum(wieviel) AS summe FROM eigenleistungen GROUP BY wer
    $var[wer], $var[wann] etc.ist ja kein problem - aber wenn ich versuchce $var[summe] zu nehmen klappt das nicht - warum nicht?

    Was heißt "klappt das nicht"? Fehlermeldung? Was steht in der Tabellenzelle, die Du mit <td colspan='4'>$line[summe]</td> (respektive: <td colspan='4'>$line['summe']</td>;) ausgezeichnet hast? Welchen Datentyp hat die Spalte 'wieviel'? Welche Werte stehen darin und wie sieht das zu erwartende Ergebnis aus?

    hth Robert

  2. Hallo!

    habe folgenden query:

    SELECT wer,wann,wofuer,sum(wieviel) AS summe FROM eigenleistungen GROUP BY wer

    So eine Query macht normalerweise wenig Sinn (mit "*" noch weniger!), und nach SQL-Standard ist es AFAIK auch gar nicht erlaubt.

    http://aktuell.de.selfhtml.org/tippstricks/datenbanken/having/index.htm

    $var[wer], $var[wann] etc.ist ja kein problem

    doch, siehe: http://de3.php.net/manual/de/language.types.array.php#language.types.array.donts

    • aber wenn ich versuchce $var[summe] zu nehmen klappt das nicht - warum nicht?
      Er gibt alle Werte korrekt aus ausser summe: hier noch mal der komplette sourcecode:

    $query="SELECT *,sum(wieviel) AS summe FROM " . $suffix . $modul1 . $order . " GROUP BY wer";

    Aber Du hast schon eine Spalte "wieviel", ja? Jedenfalls "SELECT *,sum(wieviel)...", abgesehen davon dass man "*" nicht produktiv einsetzen sollte, und dass man keine Spalten auswählen darf die nicht entweder aggregiert werden oder im GROUP BY stehen, "*" und eine aggregierte Spalte zu kombinieren ist sicher nicht richtig.

    $result = mysql_query ($query)
                 or die ("Query failed");

    MySQL scheint unglaublich/erschreckend Fehlerresistent zu sein...

    while($line = mysql_fetch_array($result))
    {
    print "<tr>
    <td>$line[id]</td>
    <td>$line[wer]</td>
    <td>$line[wieviel]</td>
    <td>$line[wofuer]</td>
    <td>$line[wann]</td>

    Bedenke auch hier das was wie oben verlinkt um Manual zu $foo[bar] steht.

    }
    <td colspan='4'>$line[summe]</td>";

    mysql_close($link);

    Du willst mit einer Abfrage "wieviel" und "sum(wieviel)" ausgeben - wie soll das denn gehen? Dass kann nur sinnvolle Werte ergeben, wenn es immer nur eine Zeile pro "wer" gibt. Und dann brauchst Du wieder keine Gruppierungen.
    Wenn Du erst die Tabelle "normal" abfragen willst, mit allen Zeilen... und am Ende die Summe drunterschreiben willst, mache 2 Abfragen.

    Grüße
    Andreas

    --
    SELFHTML Feature Artikel: http://aktuell.de.selfhtml.org/artikel/