Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Mit php drei Spalten von einer MSSQL DB addieren.

Frage Entwicklung

Mitglied: helmuthelmut2000

helmuthelmut2000 (Level 2) - Jetzt verbinden

29.07.2006, aktualisiert 04.08.2006, 6722 Aufrufe, 9 Kommentare

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
Mitglied: Dani
29.07.2006 um 21:42 Uhr
Hi,
du machst zuerst ein select der 3 Spalten.

01.
$sql="SELECT * FROM TABELLE;"; 
02.
$result=mssql_query($sql); 
03.
$row=mssql_fetch_object($result);
Dann addieren und updaten:
01.
$sql="UPDATE TABELLE SET erg='".($row->spalte1+$row->spalte2+$row->spalte3)."';"; 
02.
mssql_query($sql);
Gruß
DAni
Bitte warten ..
Mitglied: filippg
30.07.2006 um 00:46 Uhr
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).
Bitte warten ..
Mitglied: Biber
30.07.2006 um 00:58 Uhr
@helmuthelmut2000
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:
01.
$sql="SELECT feld1, feld2, feld3, feld1+feld2+feld3 as SummeFeld1Bis3 FROM TABELLE;"; 
02.
$result=mssql_query($sql); 
03.
$row=mssql_fetch_object($result);
... 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]
Bitte warten ..
Mitglied: helmuthelmut2000
30.07.2006 um 02:06 Uhr
Hallo,

Ja ich will mal die letzte lösung versuchen,
Wie mach ich das?
Du meinst ich mach mir noch ne Spalte die heist
z.B. Summe, und wie hinterlege ich da die Formel?
Kannst u mir das kurz erklären.

Danke.

Mit freundlichen Grüßen
Helmut
Bitte warten ..
Mitglied: Guenni
30.07.2006 um 09:51 Uhr
@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:

...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....

... 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.
Bitte warten ..
Mitglied: Biber
30.07.2006 um 10:26 Uhr
@Günni
stimmt in Danis Skizze.
01.
$sql="UPDATE TABELLE SET erg='".($row->spalte1+$row->spalte2+$row->spalte3)."';"; 
02.
mssql_query($sql);
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...
01.
CREATE VIEW MitSumme (Feld1, Feld2, Feld3, Summe)  
02.
as Select Feld1, Feld2, Feld3, Feld1+Feld2+Feld3 from TabelleX;
...erledigt wird, gibt es diese Notwendigkeit nicht.

Gruß
Biber
Bitte warten ..
Mitglied: helmuthelmut2000
01.08.2006 um 01:55 Uhr
Hallo,

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.

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 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
in einem Feld das sollte dann gespeichert sein um einen Verlauf mit Datum anzeigen zu
können.
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?


Gruß
Helmut
Bitte warten ..
Mitglied: Guenni
03.08.2006 um 23:01 Uhr
@helmuthelmut2000

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,
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
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

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.
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 eine
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
Bitte warten ..
Mitglied: helmuthelmut2000
04.08.2006 um 10:35 Uhr
Hallo,

Ich habe das jetzt mal so gemacht.

$result=mssql_query("Select Stueck from Ergebnisse");
$Stueck=0;
if ($row = mssql_fetch_array($result)){
do {
$currZahl=$row["Stueck"];
$Stueck+=$currZahl;
} while ($row = mssql_fetch_array($result));
}
$result=mssql_query("Select Stueck1 from Ergebnisse");
$Stueck1=0;
if ($row = mssql_fetch_array($result)){
do {
$currZahl=$row["Stueck1"];
$Stueck+=$currZahl;
} while ($row = mssql_fetch_array($result));
}
$result=mssql_query("Select Stueck2 from Ergebnisse");
$Stueck2=0;
if ($row = mssql_fetch_array($result)){
do {
$currZahl=$row["Stueck2"];
$Stueck+=$currZahl;
} while ($row = mssql_fetch_array($result));
}


echo $Kunde$Stueck1$Stueck2

Gruß
Helmut
Bitte warten ..
Neuester Wissensbeitrag
CPU, RAM, Mainboards

Angetestet: PC Engines APU 3a2 im Rack-Gehäuse

(2)

Erfahrungsbericht von ashnod zum Thema CPU, RAM, Mainboards ...

Ähnliche Inhalte
Heiß diskutierte Inhalte
Switche und Hubs
Trunk für 2xCisco Switch. Wo liegt der Fehler? (15)

Frage von JayyyH zum Thema Switche und Hubs ...

DSL, VDSL
DSL-Signal bewerten (13)

Frage von SarekHL zum Thema DSL, VDSL ...

Windows Server
Mailserver auf Windows Server 2012 (9)

Frage von StefanT81 zum Thema Windows Server ...