Mit php drei Spalten von einer MSSQL DB addieren.
Hallo,
Ich habe ein Problem,
Ich bin in sachen PHP ein totaler frischling,
aber dank diesem Forum habe ich eine schöne Seite
zustande gebracht.
Jetzt sollte ich noch drei Spalten von einer MSSQL-DB addiren.
Kann mir vielleicht jemand sagen wie ich das mache?
Das Ergbniss soll auch in eine Spalte der DB eingetragen werden.
Für eine Hilfe wäre ich sehr dankbar.
Gruß
Helmut
Ich habe ein Problem,
Ich bin in sachen PHP ein totaler frischling,
aber dank diesem Forum habe ich eine schöne Seite
zustande gebracht.
Jetzt sollte ich noch drei Spalten von einer MSSQL-DB addiren.
Kann mir vielleicht jemand sagen wie ich das mache?
Das Ergbniss soll auch in eine Spalte der DB eingetragen werden.
Für eine Hilfe wäre ich sehr dankbar.
Gruß
Helmut
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 36944
Url: https://administrator.de/forum/mit-php-drei-spalten-von-einer-mssql-db-addieren-36944.html
Ausgedruckt am: 19.05.2025 um 04:05 Uhr
9 Kommentare
Neuester Kommentar
Hallo,
das geht auch in SQL. Fragt sich nur wie
(hängt auch etwas von der Struktur ab). Ein Ansatz wäre " SELECT Summe AS (tabelle.spalte1 + tabelle.spalte2 + tabelle.spalte3) FROM......".
Filipp
Edit: Und von einem etwas akademischen Standpunkt aus betrachtet: Was du vorhast ist eine Sünde: du willst die Daten redundant speichern (die drei Werte selber und die Summe, die du ja jederzeit aus den drei Spalten errechnen kannst), was zu unagenehmen update-Fehlern führen kann.
Edit2: Hups, kleiner Fehler: die Reihenfolge muss umgekehrt werden, korrekt heisst es: "SELECT spalte1 + spalte2 + spalte3 AS Summe".
Und: was die wirklich feinere Variante ist: unter MS SQL kannst du für eine Spalte auch eine Formel angeben. Wenn du dort einfach (spalte1 + spalte2 + spalte3) angibst hast du dort immer den akutellen Wert zum einfachen Abfragen und keine Probleme mit Updates. Das ist die mit Abstand sauberste Lösung für dein Problem (besser auch als ein Umweg über PHP).
das geht auch in SQL. Fragt sich nur wie
Filipp
Edit: Und von einem etwas akademischen Standpunkt aus betrachtet: Was du vorhast ist eine Sünde: du willst die Daten redundant speichern (die drei Werte selber und die Summe, die du ja jederzeit aus den drei Spalten errechnen kannst), was zu unagenehmen update-Fehlern führen kann.
Edit2: Hups, kleiner Fehler: die Reihenfolge muss umgekehrt werden, korrekt heisst es: "SELECT spalte1 + spalte2 + spalte3 AS Summe".
Und: was die wirklich feinere Variante ist: unter MS SQL kannst du für eine Spalte auch eine Formel angeben. Wenn du dort einfach (spalte1 + spalte2 + spalte3) angibst hast du dort immer den akutellen Wert zum einfachen Abfragen und keine Probleme mit Updates. Das ist die mit Abstand sauberste Lösung für dein Problem (besser auch als ein Umweg über PHP).
@helmuthelmut2000
Von PHP versteh ich nichts - da will ich mich gar nicht einmengen.
Aber zu der Datenbankseite möchte ich doch anmerken:
Wenn dem Benutzer ein Summenfeld (als Summe dreier Tabellenspalten) angezeigt werden soll, dann lässt es sich natürlich mit Danis Strategie berechnen oder indem es gleich mit einem entsprechenden SQl-Statement abgefackelt wird:
... für den Betrachter/Benutzer kein sichtbarer Unterschied.
Aber die Tabelle ist redundanzfrei, hat ein Feld weniger (nötig) und das o.a. Update-Statement ist auch überflüssig.
Wie willst Du denn Datenkonsistenz gewährleisten, wenn irgendwann in den Feldern Feld1, Feld2 und Feld3 mal jeweils der Wert 10 steht und um Summenfeld der Wert 35???
Niemals berechnete Felder speichern, ausgenommen bestenfalls komplizierte Brechnungen wie siebente Wurzel mal cos des Netteinkaufswertes (was aber relativ selten benötigt wird). Und wenn doch, dann wird das über Trigger oder angestoßene stored procedures auf der DB-Serverseite getan, aber sicherlich nicht bei einem Arbeitsschritt wie oben, in dem die Tabelleninhalte durch den Client vom Server abgerufen werden, vom (flachbrüstigen) Client berechnet und wieder über das Netz zurückgeschickt werden zum DB-Server.
Das wäre das Vorgehen bei einem reinen File-Server-Szenario (mehrere Clients greifen auf eine Excel-Tabelle oder eine Access-MDB auf einem Netzlaufwerk zu), aber nichts, was Du tun musst, wenn Du eine echte Datenbank-Engine wie MS-SQL zur Verfügung hast.
Gruß
Biber
[Edit]
*winkzzzzz @filippg ...seh ich genauso
[/Edit]
Von PHP versteh ich nichts - da will ich mich gar nicht einmengen.
Aber zu der Datenbankseite möchte ich doch anmerken:
Das Ergbniss soll auch in eine Spalte der DB eingetragen werden.
No, no, never...Wenn dem Benutzer ein Summenfeld (als Summe dreier Tabellenspalten) angezeigt werden soll, dann lässt es sich natürlich mit Danis Strategie berechnen oder indem es gleich mit einem entsprechenden SQl-Statement abgefackelt wird:
$sql="SELECT feld1, feld2, feld3, feld1+feld2+feld3 as SummeFeld1Bis3 FROM TABELLE;";
$result=mssql_query($sql);
$row=mssql_fetch_object($result);
Aber die Tabelle ist redundanzfrei, hat ein Feld weniger (nötig) und das o.a. Update-Statement ist auch überflüssig.
Wie willst Du denn Datenkonsistenz gewährleisten, wenn irgendwann in den Feldern Feld1, Feld2 und Feld3 mal jeweils der Wert 10 steht und um Summenfeld der Wert 35???
Niemals berechnete Felder speichern, ausgenommen bestenfalls komplizierte Brechnungen wie siebente Wurzel mal cos des Netteinkaufswertes (was aber relativ selten benötigt wird). Und wenn doch, dann wird das über Trigger oder angestoßene stored procedures auf der DB-Serverseite getan, aber sicherlich nicht bei einem Arbeitsschritt wie oben, in dem die Tabelleninhalte durch den Client vom Server abgerufen werden, vom (flachbrüstigen) Client berechnet und wieder über das Netz zurückgeschickt werden zum DB-Server.
Das wäre das Vorgehen bei einem reinen File-Server-Szenario (mehrere Clients greifen auf eine Excel-Tabelle oder eine Access-MDB auf einem Netzlaufwerk zu), aber nichts, was Du tun musst, wenn Du eine echte Datenbank-Engine wie MS-SQL zur Verfügung hast.
Gruß
Biber
[Edit]
*winkzzzzz @filippg ...seh ich genauso
[/Edit]
@helmuthelmut2000
Hi,
mache es so, wie Biber und fillipg es anfangs beschrieben haben.
Berechnungen aus Abfragen werden nie gespeichert.(Wer Spass daran hat,
soll es ruhig tun
)
Warum auch?
Tabellen in Datenbanken sind ja selten statisch, das heißt, nach jeder
Änderung müßte in deinem Fall ein Update des Ergebnisfeldes durchgeführt werden.
Entweder für die gesamte Tabelle, oder du mußt in einzelnen Fällen
auch genau bestimmen, welche Datensätze nun aktualisiert werden
sollen.
Eine entsprechend formulierte Abfrage hingegen liefert dir sofort
gewünschte Ergebnisse.
Gruß
Günni
Kleine Anmerkung zu Biber:
... ist nicht richtg.
Das Script wird auf dem Server ausgeführt, heißt auch alle Berechnungen
finden dort statt. Erst das Ergebnis wird zum Client gesendet.
Hi,
mache es so, wie Biber und fillipg es anfangs beschrieben haben.
Berechnungen aus Abfragen werden nie gespeichert.(Wer Spass daran hat,
soll es ruhig tun
Warum auch?
Tabellen in Datenbanken sind ja selten statisch, das heißt, nach jeder
Änderung müßte in deinem Fall ein Update des Ergebnisfeldes durchgeführt werden.
Entweder für die gesamte Tabelle, oder du mußt in einzelnen Fällen
auch genau bestimmen, welche Datensätze nun aktualisiert werden
sollen.
Eine entsprechend formulierte Abfrage hingegen liefert dir sofort
gewünschte Ergebnisse.
Gruß
Günni
Kleine Anmerkung zu Biber:
...aber sicherlich nicht bei einem Arbeitsschritt wie oben, in dem die
Tabelleninhalte durch den Client vom Server abgerufen werden, vom
(flachbrüstigen) Client berechnet und wieder über das Netz zurückgeschickt
werden zum DB-Server....
Tabelleninhalte durch den Client vom Server abgerufen werden, vom
(flachbrüstigen) Client berechnet und wieder über das Netz zurückgeschickt
werden zum DB-Server....
... ist nicht richtg.
Das Script wird auf dem Server ausgeführt, heißt auch alle Berechnungen
finden dort statt. Erst das Ergebnis wird zum Client gesendet.
@günni
stimmt in Danis Skizze.
Hast recht. Hatte ich falsch in Erinnerung bei meinem ersten Posting - ich dachte, die Summe wird vorher via PHP berechnet.
Dennoch bliebe auch auf diese Art der ganze zeitintensive und unnötige Overhead der C/S-Kommunikation - das SQL-Statement auf syntaktische Richtigkeit prüfen, kompilieren, Resultset bzw Ergebnis über die Leitung zurückmelden.
Wenn das Ganze via berechnetem Summenfeld in einem View...
...erledigt wird, gibt es diese Notwendigkeit nicht.
Gruß
Biber
stimmt in Danis Skizze.
$sql="UPDATE TABELLE SET erg='".($row->spalte1+$row->spalte2+$row->spalte3)."';";
mssql_query($sql);
Dennoch bliebe auch auf diese Art der ganze zeitintensive und unnötige Overhead der C/S-Kommunikation - das SQL-Statement auf syntaktische Richtigkeit prüfen, kompilieren, Resultset bzw Ergebnis über die Leitung zurückmelden.
Wenn das Ganze via berechnetem Summenfeld in einem View...
CREATE VIEW MitSumme (Feld1, Feld2, Feld3, Summe)
as Select Feld1, Feld2, Feld3, Feld1+Feld2+Feld3 from TabelleX;
Gruß
Biber
@helmuthelmut2000
außer das, was die Fehlermeldung eh' schon sagt.

Du kannst ja in einem PHP-Script mehrere Abfragen definieren, du mußt halt nur
die Ergebnisse unterschiedlichen Variablen zuordnen:
Du addierst die Spalte Stückzahl mit select sum(stückzahl), das Ergebnis weist du
einer Textbox zu, die du irgendwo in der Seite plazierst.
Dazu änderst du den Select in Select sum(stückzahl) group by auftrag, dazu muß
jeder Auftrag eine eindeutige ID besitzen.
Wenn du einen Verlauf abfragst, ist das Ergebnis doch quasi schon in der Abfrage selber
gespeichert. Was du vor hast ist, korrigiere mich jemand, wenn ich falsch liege, eine
Abfrage abzusetzen, die Tabelle zu "updaten", anschließend die "geupdatete" Tabelle
abzurufen.
Antwort gibt zu blablabla, das ist ja fast schon eine Anwendungsentwicklung.
Und das wird dir hier keiner abnehmen, das ist doch dein Part, oder???
Gruß
Günni
Ich habe das mal von Biber probiert,
da bekomme ich aber immer die Fehlermeldung:
Warning: mssql_fetch_object(): supplied argument is not a valid MS SQL-result resource in
C:\Programme\Apache Group\Apache2\htdocs\Auftrag.php on line 27.
Dazu müßte man mal den Quellcode sehen, ansonsten kann man da nix zu sagen,da bekomme ich aber immer die Fehlermeldung:
Warning: mssql_fetch_object(): supplied argument is not a valid MS SQL-result resource in
C:\Programme\Apache Group\Apache2\htdocs\Auftrag.php on line 27.
außer das, was die Fehlermeldung eh' schon sagt.
Ich erkläre mal kurz was ich da will.
Ich mache gerade eine Seite wo die Auftragsbestände zusammengezählt werden.
Es gibt Spalten:
Kunde, Auftagsnummer, Stückzahl, u.s.w.
Jetzt soll immer die Spalte Stückzahl zusammengezählt in einem Feld angezeigt werden.
Das ist aber jetzt mal was anderes, als 3 Spalten addieren Ich mache gerade eine Seite wo die Auftragsbestände zusammengezählt werden.
Es gibt Spalten:
Kunde, Auftagsnummer, Stückzahl, u.s.w.
Jetzt soll immer die Spalte Stückzahl zusammengezählt in einem Feld angezeigt werden.
Du kannst ja in einem PHP-Script mehrere Abfragen definieren, du mußt halt nur
die Ergebnisse unterschiedlichen Variablen zuordnen:
Du addierst die Spalte Stückzahl mit select sum(stückzahl), das Ergebnis weist du
einer Textbox zu, die du irgendwo in der Seite plazierst.
Das bracht noch nicht abgespeichert sein denn es werden ja auch Aufträge abgearbeitet
und da ändert sich das ja laufend.
Dann möchte ich noch bei jedem Auftrag der hinzukommt die aktuelle Stückzahl anzeigen
und da ändert sich das ja laufend.
Dann möchte ich noch bei jedem Auftrag der hinzukommt die aktuelle Stückzahl anzeigen
Dazu änderst du den Select in Select sum(stückzahl) group by auftrag, dazu muß
jeder Auftrag eine eindeutige ID besitzen.
in einem Feld das sollte dann gespeichert sein um einen Verlauf mit Datum anzeigen zu
können.
Womit wir wieder da sind, was man eigentlich nicht machen sollte.können.
Wenn du einen Verlauf abfragst, ist das Ergebnis doch quasi schon in der Abfrage selber
gespeichert. Was du vor hast ist, korrigiere mich jemand, wenn ich falsch liege, eine
Abfrage abzusetzen, die Tabelle zu "updaten", anschließend die "geupdatete" Tabelle
abzurufen.
Dazu muß ich doch nur eine Spalte addieren können und auch mal ein paar Felder subdrahieren können.
Könnt ihr euch das Vorstellen wie ich das meine?
Klar, kann man sich das vorstellen, ist aber kein Problem in dem Sinne, dass man hier eineKönnt ihr euch das Vorstellen wie ich das meine?
Antwort gibt zu blablabla, das ist ja fast schon eine Anwendungsentwicklung.
Und das wird dir hier keiner abnehmen, das ist doch dein Part, oder???
Gruß
Günni