| SQL / Datenbanken Probleme mit SQL? Hier könnt ihr eure Fragen zu SQL (MySQL, PostgreSQL, MS-SQL und andere ANSI-SQL Server) los werden. |
 |

24-07-2010, 09:25
|
|
Sven4972
Registrierter Benutzer
|
|
Registriert seit: Dec 2004
Beiträge: 133
|
|
Kontostand abfragen
Hallo,
ich lasse mir mit folgendem Code, den Kontostand eines Mitgliedes ausgeben:
PHP-Code:
$abfrage = "SELECT nickname, date_format(datum, '%d.%m.%Y') AS datum, verwendung, grund, betrag
FROM konto where nickname='" . $_POST['auswahl'] . "'";
$ergebnis = mysql_query($abfrage);
$result = mysql_query("SELECT SUM(betrag) as plus FROM konto
where nickname='" . $_POST['auswahl'] . "' AND typ='Einnahme'");
$row=mysql_fetch_object($result);
$summe1 = $row->plus;
$result = mysql_query("SELECT SUM(betrag) as minus FROM konto
where nickname='" . $_POST['auswahl'] . "' AND typ='Ausgabe'");
$row=mysql_fetch_object($result);
$summe2 = $row->minus;
$diff= $summe1-$summe2;
echo "<tr><td class='links'><strong>Einnahmen</strong></td>";
echo "<td class='mitte3'><strong>";
echo $summe1;
echo "</strong></td><td class='rechts'><strong>Euro</strong></td></tr>";
echo "<tr><td class='links'><strong>Ausgaben</strong></td>";
echo "<td class='mitte3'><strong>";
echo $summe2;
echo "</strong></td><td class='rechts'><strong>Euro</strong></td></tr>";
echo "<tr><td class='links'><strong>Kontostand</strong></td>";
echo "<td class='mitte3'><strong>";
echo $diff;
echo "</strong></td><td class='rechts'><strong>Euro</strong></td></tr>";
Nun möchte ich mir eine Liste ausgeben lassen, wo die Kontostände aller Mitglieder aufgelistet werden.
Versucht habe ich bis jetzt:
PHP-Code:
$abfrage = "SELECT nickname, date_format(datum, '%d.%m.%Y') AS datum, verwendung, grund, betrag
FROM konto GROUP BY nickname";
$ergebnis = mysql_query($abfrage);
$result = mysql_query("SELECT SUM(betrag) as plus FROM konto
WHERE typ='Einnahme' GROUP BY nickname");
$row=mysql_fetch_object($result);
$summe1 = $row->plus;
$result = mysql_query("SELECT SUM(betrag) as minus FROM konto
WHERE typ='Ausgabe' GROUP BY nickname");
$row=mysql_fetch_object($result);
$summe2 = $row->minus;
$diff= $summe1-$summe2;
while ($row = mysql_fetch_object($ergebnis))
{
echo "<tr><td class='links'>";
echo $row -> nickname;
echo "</td><td class='mitte3'>";
echo $summe1;
echo "</td><td class='rechts'>Euro</td></tr>";
}
?>
Nun wird aber bei jedem Mitglied der gleiche Kontostand angezeigt.
Was muss geändert werden, damit bei jedem Mitglied der richtige Kontostand angezeigt wird?
LG Sven
|

24-07-2010, 10:05
|
|
Thora
Registrierter Benutzer
|
|
Registriert seit: Aug 2009
Beiträge: 1
|
|
Code:
$summe2 = $row->minus;
$diff= $summe1-$summe2;
Muss innerhalb der while-schleife gesetzt werden da sonst nur einmal der Betrag errechnet wird und dann nicht wieder verändert wird.
Somit hast du den ersten Kontostand aus der DB bei jedem Mitglied
Gruß
Thora
|

24-07-2010, 14:17
|
|
Sven4972
Registrierter Benutzer
|
|
Registriert seit: Dec 2004
Beiträge: 133
|
|
Hallo,
wenn ich das in die While-Schleife mit einbaue, dauert die Ausführung des Scriptes länger,
und es wird bei jedem Mitglied, immer noch der gleiche Kontostand angezeigt.
LG Sven
|

24-07-2010, 15:38
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.482
|
|
Code herzeigen - wir können nicht immer raten, was die Leute verbocken, wenn sie versuchen Ratschläge zu befolgen ...
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|

24-07-2010, 15:54
|
|
Sven4972
Registrierter Benutzer
|
|
Registriert seit: Dec 2004
Beiträge: 133
|
|
Hallo,
ich habe es so versucht:
PHP-Code:
$abfrage = "SELECT nickname, date_format(datum, '%d.%m.%Y') AS datum, verwendung, grund, betrag
FROM konto GROUP BY nickname";
$ergebnis = mysql_query($abfrage);
$result = mysql_query("SELECT nickname, SUM(betrag) as plus FROM konto
WHERE typ='Einnahme' GROUP BY nickname");
$row=mysql_fetch_object($result);
$result = mysql_query("SELECT nickname, SUM(betrag) as minus FROM konto
WHERE typ='Ausgabe' GROUP BY nickname");
$row=mysql_fetch_object($result);
$platz = 0;
while ($row = mysql_fetch_object($ergebnis))
{
$summe1 = $row->plus;
$summe2 = $row->minus;
$diff= $summe1-$summe2;
echo "<tr><td class='links'>";
echo $platz = $platz + 1;
echo "</td><td class='mitte1'>";
echo $row -> nickname;
echo "</td><td class='mitte2'>";
echo $diff;
echo "</td><td class='rechts'>Euro</td></tr>"; }
Und auch so:
PHP-Code:
$abfrage = "SELECT nickname, date_format(datum, '%d.%m.%Y') AS datum, verwendung, grund, betrag
FROM konto GROUP BY nickname";
$ergebnis = mysql_query($abfrage);
$platz = 0;
while ($row = mysql_fetch_object($ergebnis))
{
$result = mysql_query("SELECT nickname, SUM(betrag) as plus FROM konto
WHERE typ='Einnahme' GROUP BY nickname");
$row=mysql_fetch_object($result);
$summe1 = $row->plus;
$result = mysql_query("SELECT nickname, SUM(betrag) as minus FROM konto
WHERE typ='Ausgabe' GROUP BY nickname");
$row=mysql_fetch_object($result);
$summe2 = $row->minus;
$diff= $summe1-$summe2;
echo "<tr><td class='links'>";
echo $platz = $platz + 1;
echo "</td><td class='mitte1'>";
echo $row -> nickname;
echo "</td><td class='mitte2'>";
echo $diff;
echo "</td><td class='rechts'>Euro</td></tr>"; }
LG Sven
|

24-07-2010, 16:06
|
wahsaga
 Moderator
|
|
Registriert seit: Sep 2001
Beiträge: 24.482
|
|
SQL-Abfragen in Schleifen sind ganz böse - da ist klar, dass dabei die Performance in den Keller geht.
Die Ermittlung von plus und minus kannst du auf jeden Fall in einer Abfrage vereinen, in dem du auch noch nach typ gruppierst.
Und bist du an den einzelnen Daten, die die erste Abfrage liefert, überhaupt interessiert in diesem Fall?
Wenn ja - beschäftige dich mit JOINs, http://aktuell.de.selfhtml.org/artikel/datenbanken/
Wenn nein - dann weg damit.
__________________
I don't believe in rebirth. Actually, I never did in my whole lives.
|
|
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
|
|
|
| Themen-Optionen |
|
|
| 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.
HTML-Code ist aus.
|
|
|
|
PHP News
|