Hallo zusammen
Habe eine kurze Frage:
Gibt es ein MySQL Befehl mit dem man bestimmte
Felder einer Tabelle bzw. deren Inhalt addieren kann?
Also um z.B. alle Felder „Preis“ zu addieren?
Mfg:
Sam
Hallo zusammen
Habe eine kurze Frage:
Gibt es ein MySQL Befehl mit dem man bestimmte
Felder einer Tabelle bzw. deren Inhalt addieren kann?
Also um z.B. alle Felder „Preis“ zu addieren?
Mfg:
Sam
Hi!
Habe eine kurze Frage:
Gibt es ein MySQL Befehl mit dem man bestimmte
Felder einer Tabelle bzw. deren Inhalt addieren kann?
Also um z.B. alle Felder „Preis“ zu addieren?Mfg:
Sam
Etwa so:
Select
SUM(Preis) as Total
from
Liefert die Summe aller Preisfelder der Tabelle im Ergebnisfeld „Total“.
Das SQL-Statement lässt sich mit einer „where“-Klausel auch auf einen Teilbestand des Tabelleninhaltes beschränken, etwa:
Select
SUM(Preis) as Total
from
where
Land = ‚D‘
(Feld „Land“ muss natürlich in der Tabelle vorkommen. Dann wird die Summe nur über jene Datensätze gebildet, die in „Land“ den Wert „D“ stehen haben)
Ist aber kein MySQL-Befehl, sondern ein Aggregationsbefehl aus dem ganz normalen SQL (geht also auch in allen anderen SQL-tauglichen Datenbanken).
Grüße
Heinrich
Hallo Heinrich
Danke für deine Info…
Habe das mal probiert…
Leider funktionierts bei mir nicht.
Hab’s mal so versucht:
$rechnung = mysql_query(„Select SUM(Preis) as Total from Shoppingsessions WHERE Session LIKE '“.$_SESSION[‚session‘]."’");
while ($row = mysql_fetch_array($abfrage)) {
echo $row[‚Total‘];
}
sollte mir das jetzt nicht das Total Feld anzeigen (Welches ich vorher generiert habe) ?
Mfg:
Sam
hi Samuel,
$rechnung = mysql_query(„Select SUM(Preis) as Total from
Shoppingsessions WHERE Session LIKE
'“.$_SESSION[‚session‘]."’");
> while ($row = mysql\_fetch\_array($abfrage)) {
an dieser Stelle ist der Fehler, du wills ein Assosiated array, dass musst du ihm noch sagen ersetze oben mit
while ($row = mysql\_fetch\_array($abfrage, MYSQL\_ASSOC)){
dann solle das unten auch klappen!
> echo $row['Total'];
> }
gruss josh
Hallo Josh
Danke für Deinen Tipp.
Läuft aber leider immer noch nicht.
Was macht denn MYSQL_ASSOC?
Es zeigt keine Fehlermeldung, aber auch kein Resultat an…
Mfg:
Sam
hi samuel,
Läuft aber leider immer noch nicht.
hm, merkwuerdig. keine Fehlermeldung?
was passiert denn wenn du in deinem script mal ein
echo "blabliblub";
an mehreren Stellen einbaust…
Was macht denn MYSQL_ASSOC?
steht hier
http://www.php.net/manual/de/function.mysql-fetch-ro…
alternativ kann man anscheinend auch gleich
mysql_fetch_assoc benutzen.
Es zeigt keine Fehlermeldung, aber auch kein Resultat an…
man ist der bloed
hm: keine Fehlermeldung kann auch an Fehler verschluckenden php Einstellungen liegen _glaube_ ich…
wenn der echo klappt, dann bau doch mal ein phpinfo(); ein und poste den link zu der phpinfo (aber darauf achten dass ganz unter in der phpinfo keine geheimnisse von dir stehen). falls ich dann schon auf dem festival (labore ich komme!) am wochenende bin, kann Dir sicher einer der anderen helfen…
hth
josh
hm, merkwuerdig. keine Fehlermeldung?
was passiert denn wenn du in deinem script mal ein
echo „blabliblub“;
an mehreren Stellen einbaust…
Also, anzeigen tut er alles (auch meine vorherige MySQL abfrage,
die gewählten Artikel etc.)
man ist der bloed
hm: keine Fehlermeldung kann auch an Fehler verschluckenden
php Einstellungen liegen _glaube_ ich…
Der Blöde bin eher ich
Fehlermeldung-Verschlukungsparameter (was für ein wort )
hab ich keine drin. Zeigt mir ja auch andere Fehlermeldungen an,
wenn ich was anderes absichtlich falsch mache um zu testen.
falls ich dann schon auf dem festival (labore ich komme!) am
wochenende bin, kann Dir sicher einer der anderen helfen…
Da wünsche ich doch viel Vergnügen
Mfg:
Samuel
hi samuel,
und was passiert wenn du ueber dein resultset oder ueber row mal einen var_dump machst?
var_dump($row);
var_dump($abfrage);
Der Blöde bin eher ich
naaa, nicht doch
Da wünsche ich doch viel Vergnügen
danke!
bis dann josh
Hi ihr Beiden,
ersmal nochmal der Code:
$rechnung = mysql_query(„Select SUM(Preis) as Total from :Shoppingsessions WHERE Session LIKE '“.$_SESSION[‚session‘]."’");
while ($row = mysql_fetch_array($abfrage)) {
echo $row[‚Total‘];
}
Der Fehler liegt in der Zeile:
while ($row = mysql_fetch_array($abfrage)) {
Aber nicht wegen dem Assoc, sondern, die Variable $abfrage passt nicht.
Da gehört $rechnung rein, dann gehts.
Schließlich will mysql_fetch_array() ein Mysql-Result und das liefert mysql_query()
Hi Jens
Danke für deine Hilfe…
Leider klappt es immer noch nicht…
Könntest Du mir evt. einfach mal kurz aufzeigen,
wie ich es anstellen kann, dass ich mit MySQL eine Addition
ausführen kann und das Resultat dann in eine Variable speichern
und AUSGEBEN kann?
(*buhuhuuu* mehr will ich doch gar nicht )
Bin langsam am verzweifeln, komme seit 2 Tagen wegen
diesem Problem nicht mehr weiter bei meinem Onlineshop…
Mfg:
Sam
schreib Du nochmal Deinen aktuellen Code hier rein…
theoretisch ist $abfrage aber nicht belegt…
Hi!
Könntest Du mir evt. einfach mal kurz aufzeigen,
wie ich es anstellen kann, dass ich mit MySQL eine Addition
ausführen kann und das Resultat dann in eine Variable
speichern
und AUSGEBEN kann?(*buhuhuuu* mehr will ich doch gar nicht
)
So zum Beispiel:
//1.Schritt: Verbindung zum Datenbankserver herstellen
//Verbindung mit MySQL aufbauen: host, user, passwort
$conn = mysql_connect(„localhost“, „root“, „“);
//2.Schritt: Datenbank auf dem Datenbankserver bestimmen
//Datenbank bestimmen: DB_Name, MySQL-Handle
mysql_select_db(„MeineDatenbank“, $conn) or die(„Fehler:“.mysql_error($conn));
//3.Schritt: das SQL für den Zugriff aufbauen
//auf Groß-/Kleinschreibung achten je nach Datenbankserver !!!
//sql-befehl aufbauen
$sql = "Select SUM(FELD1) as GESAMT from TABELLE1 ";
//4.Schritt: das SQL ausführen
//sql-befehl ausfuehren
$ergebnis = mysql_query($sql, $conn) or die(„Fehler:“.mysql_error($conn)."
$sql");
//5.Schritt: Wenn Ergebnis vorhanden, dieses Ergebnis in Variable bringen
//Ergebnisdaten auslesen
if ($data = mysql_fetch_row($ergebnis))
{
$ausgabe = $data[0];
}
//6.Schritt: Verbindung zum Datenbankserver beenden
//Datenbankverbindung schließen
mysql_close($conn);
//7.Schritt: Daten mittels echo-Befehl ausgeben
//ermittelte Daten ausgeben
echo „Die Summe ist $ausgabe“;
Das wär’s.
Statt des echo-Befehls kannst du die Variable $ausgabe auch in die entsprechenden HTML-Befehle einbinden.
Noch Fragen?
Grüße
Heinrich
Hi Heinrich
$sql = "Select SUM(FELD1) as GESAMT from TABELLE1 ";
Muss ich für „GESAMT“ auch ein Feld machen in der Tabelle?
Die Datenbankverbindung habe ich in ein externes File
geschrieben welches ich immer mit include einfüge.
Hat bis jetzt immer gut geklappt.
Mfg und THX:
Sam
Hi!
$sql = "Select SUM(FELD1) as GESAMT from TABELLE1 ";
Muss ich für „GESAMT“ auch ein Feld machen in der Tabelle?
Nein.
Es handelt sich bei dem SQL-Statement um ein Select, nicht um ein Update. Ein Select schreibt nichts in eine Tabelle. Wozu also ein Datenfeld?
Einfachstes Beispiel:
„Select Feld1 from Tabelle1“
Ergebnis:
Liest aus allen Datensätzen der Tabelle1 die Daten des Feldes Feld1 aus und stellt sie im Arbeitsspeicher zur Verfügung (abholen muss man diese Daten dann per Programmbefehl). Die gelesenen Daten stehen in einem bestimmten Speicherbereich zur Verfügung.
In PHP wird das SQL über folgende Zeile ausgeführt:
$ergebnis = mysql_query($sql, $conn);
wobei $sql das o.g. SQL-Statement enthält und $conn auf eine gültige Datenbankverbindung zeigt. In $ergebnis steht die Antwortmenge des Datenbankzugriffes.
Angenommen, Tabelle1 hat drei Felder (Feld1, Feld2, Feld3) und enthält fünf Datensätze, dann liefert das o.g. SQL alle fünf Datensätze, aber jeweils nur das Feld1. $ergebnis enthält genau diese fünf Datensätze, bestehend aus nur einem Feld.
Um über PHP an die gelesenen Datensätze zu kommen, muss ein Zugriff auf die Antwortmenge erfolgen. Es gibt zwei Zugriffsmöglichkeiten:
a) über die Positionsnummer des Feldes
b) über den Feldnamen selbst
Für Möglichkeit A (Zugriff über Positionsnummer des Datenfeldes) lautet der PHP-Befehl „$datensatz = mysql_fetch_row($ergebnis)“
Damit bekomme ich genau einen Datensatz aus meiner Antwortmenge $ergebnis nach $datensatz gestellt.
$datensatz muss jetzt noch in seinen einzelnen Datenfelder zerlegt werden. Da mit „mysql_fetch_row“ gelesen wurde, geht das nur über die Positionsnummer des Feldes:
„$wert = $datensatz[0];“
Die Indexzählung in PHP beginnt immer mit 0!
Wird statt „mysql_fetch_row($ergebnis)“ mit „mysql_fetch_assoc($ergebnis)“ ausgelesen, lassen sich die Datenfelder über ihren Namen ansprechen, also:
„$wert = $datensatz[„feld1“];“
Zusammenfassung:
Die Datenbanktabelle „Tabelle1“ hat 3 Felder mit 5 Datensätzen:
Feld1 Feld2 Feld3
10000 12345 aaaaa
20000 23456 bbbbb
30000 34567 ccccc
20000 45678 aaaaa
10000 56789 ccccc
Das SQL-Statement „Select Feld1 from Tabelle1“ liefert alle 5 Sätze, aber nur „Feld1“ (das ist dann Inhalt der Variablen $ergebnis):
10000
20000
30000
20000
10000
Mit „mysql_fetch_row“ bzw. „mysql_fetch_assoc“ wird genau ein Datensatz aus der Antwortmenge $ergebnis nach $datensatz geholt:
10000
Wurde mit „mysql_fetch_row“ gelesen, kann das Datenfeld nur über seine laufende Nummer ausgelesen werden:
$wert = $datensatz[0];
In $wert steht 10000
Wurde mit „mysql_fetch_assoc“ gelesen, kann das Datenfeld nur über seinen Feldname ausgelesen werden:
$wert = $datensatz[„Feld1“];
Auch hier steht in $wert jetzt 10000
Um auf den zweiten und alle weiteren Datensätze in $ergebnis zu kommen, muss das „mysql_fetch_…“ in einer While-Schleife laufen.
Ich ändere jetzt das SQL-Statement, um ein zweites Beispiel zu zeigen:
"Select Feld1, Feld2 from Tabelle1 where Feld3 = ‚aaaaa‘ "
Das SQL abschicken wie oben beschrieben. Gelesen werden jetzt aber nur jene Datensätze, wo in Feld3 der Wert ‚aaaa‘ steht. Also enthält $ergebnis jetzt:
Feld1 Feld2
10000 12345
20000 45678
Mit „mysql_fetch_row“ bzw. „mysql_fetch_assoc“ wird ein Datensatz nach $datensatz geholt:
Feld1 Feld2
10000 12345
Jetzt muss der Datensatz wieder in seine Felder aufgelöst werden ("…_row" verlangt die laufende Feldnummer, „…_assoc“ den Feldnamen):
$wert1 = $datensatz[0];
$wert2 = $datensatz[1];
bzw.
$wert1 = $datensatz[„Feld1“];
$wert2 = $datensatz[„Feld2“];
Damit entält $wert1 die 10000, $wert2 die 12345.
Mit While-Schleife dann den zweiten Datensatz abholen.
Für dein Problem konkret:
Das SQL lautet:
"Select SUM(Feld1) as Gesamt from Tabelle1 "
Aufgrund des Inhaltes der Tabelle1:
Feld1 Feld2 Feld3
10000 12345 aaaaa
20000 23456 bbbbb
30000 34567 ccccc
20000 45678 aaaaa
10000 56789 ccccc
wird ein Ergebnis berechnet ausschließlich über Feld1, also:
10000 + 20000 + 30000 + 20000 + 10000 = 90000
In $ergebnis steht jetzt der Wert 90000. Aber welchen Namen hat der Wert 90000 ? Würde das „as Gesamt“ fehlen, generiert die Datenbank einen eigenen Namen. Mit „as Gesamt“ gibst du der Datenbank den Namen für das Summenergebnis vor. Folglich steht in $ergebnis:
90000
Das kannst du jetzt wieder über die beiden fetch-Methoden wie gehabt auslesen.
Tipp zum guten Schluss:
Wenn du mit Datenbankzugriffen arbeiten willst, solltest du dir zumindest ein paar Grundlagen über Datenbanken aneignen (Aufbau von Tabellen, Indizes, Zugriffsmöglichkeiten). Außerdem wären Grundkenntnisse in SQL ziemlich von Vorteil (man muss SQL nicht in allen Einzelheiten kennen, aber die Grundbegriffe von Select, Update, Insert, Delete und deren Syntax sollte man schon draufhaben, bevor man mit Programmen und zusammengestoppelten SQL-Statements auf Datenbanken zugreift).
Grüße
Heinrich
Hallo Heinrich
Danke für deine Umfangreichen Tipps…
Ich hab es mittlerweile geschafft
Mein Web-Shop funktioniert nun (ziemlich) gut!
Besten Dank und einen schönen Wochenendrest
Mfg:
Sam