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
GELÖST

Werte die durch eine sql abfrage bekommen werden addieren...

Frage Entwicklung PHP

Mitglied: dax4fun

dax4fun (Level 1) - Jetzt verbinden

13.04.2014, aktualisiert 14.04.2014, 4560 Aufrufe, 5 Kommentare, 1 Danke

Hi Leute,

hab mir ein html und php script gebastelt wo ich abfragen absenden kann.

funktioniert auch, doch ich möchte es erweitern in dem alle werte die angezeigt werden spalten weise addiert werden.

beim googlen wird immer select sum() erwähnt und das immer nur von ganzen Tabellen und nicht nur von selektierten Datensätzen. Das ist mein Problem

Hab mir das so vorgestellt ich selektiere die benötigten Daten übersichtshalber werden die Sätze zeilenweise als HTML ausgegeben und unterhalb sollen die jeweiligen spalten dieser Sätze zusammengerechnet werden IN OUT BALANCE

Ist das möglich ??? besser wie geht das

bis jetzt habe ich das hier:
form.html
01.
<html> 
02.
<head><title>search EOD info</title></head> 
03.
<body> 
04.
<h3>SHOP INFO</h3> 
05.
<hr> 
06.
<form action="abfrage.php" method="post"> 
07.
<br> 
08.
SHOP:    <input type="text" name="SHOP" size="20" maxlength="20" value="SHOP"><br> 
09.
<br> 
10.
DATUM: <input type="text" name="DATUM" size="20" maxlength="20" value="JJJJMMDD"><br> 
11.
<br> 
12.
<input type="submit" value="search"> 
13.
<input type="reset"  value="reset"><br> 
14.
<br>556% = 556001 - 556999 , 201404% = 20140401 - 20140430<br> 
15.
</form> 
16.
<hr> 
17.
</body></html>
abfrage.php
01.
 
02.
<?php 
03.
    $_db_host = "mysqlsvr35.world4you.com";            # meist localhost 
04.
    $_db_datenbank = "xxx"; 
05.
    $_db_username = "xxx"; 
06.
    $_db_passwort = "xxx"; 
07.
 
08.
$SHOP = $_POST['SHOP']; 
09.
$DATUM = $_POST['DATUM']; 
10.
 
11.
mysql_connect($_db_host, $_db_username, $_db_passwort); 
12.
mysql_select_db($_db_datenbank); 
13.
unset($host,$user,$pass,$_db_datenbank); 
14.
 
15.
 
16.
$sql="SELECT * FROM GLOBAL WHERE DATUM LIKE '$DATUM' AND SHOP LIKE '$SHOP'"; 
17.
 
18.
$result = mysql_query($sql) or die(mysql_error());; 
19.
 
20.
 
21.
while($row = mysql_fetch_array($result)) { 
22.
 
23.
 
24.
echo "  SHOP: " . $row["SHOP"] . "  DATUM: " . $row["DATUM"] . "  ULAZ: " . $row["IN"] .  "  IZLAZ: " . $row["OUT"] . "  BALANS: " . $row["BALANCE"] . "  TIKETA: " . $row["TICKETS"] . "  OP1: " . $row["ONL1"] .  "  OP1 TIKETA: " . $row["ONL1TICKETS"] . "  OP2: " . $row["ONL2"] . "  OP2 TIKETA: " . $row["ONL2TICKETS"] . "<hr>"; 
25.
26.
 
27.
 
28.
 
29.
mysql_close($link); 
30.
?>
Datensätze:
cdc47c6d7bd202d72293191851638e07 - Klicke auf das Bild, um es zu vergrößern

Mitglied: EvilMoe
13.04.2014, aktualisiert um 07:46 Uhr
Hallo,


1. Dein Script ist nicht gegen MYSQL Injections geschützt.
2. SUM ist schon richtig.
01.
$sql="SELECT SUM(IN), SUM(OUT), SUM(BALANCE), SUM(TICKETS) ....   
02.
FROM GLOBAL  
03.
WHERE DATUM LIKE '$DATUM' AND SHOP LIKE '$SHOP' 
04.
GROUP BY SHOP"; 
Bitte warten ..
Mitglied: Arano
LÖSUNG 13.04.2014, aktualisiert 14.04.2014
Moin moin,

das funktioniert aber nur als zweite Abfrage !
So bekommt man die einzelnen Datensätze nicht mehr.
01.
mysql> describe sum; 
02.
+-------+---------+------+-----+---------+-------+ 
03.
| Field | Type    | Null | Key | Default | Extra | 
04.
+-------+---------+------+-----+---------+-------+ 
05.
| id    | int(11) | YES  |     | NULL    |       | 
06.
| wert  | int(11) | YES  |     | NULL    |       | 
07.
+-------+---------+------+-----+---------+-------+ 
08.
2 rows in set (0,00 sec) 
09.
 
10.
mysql> select * from sum; 
11.
+------+------+ 
12.
| id   | wert | 
13.
+------+------+ 
14.
|    1 |   10 | 
15.
|    1 |   20 | 
16.
|    2 |   30 | 
17.
|    2 |   40 | 
18.
+------+------+ 
19.
4 rows in set (0,00 sec) 
20.
 
21.
mysql> select id,wert,sum(wert) from sum where id=1 group by id; 
22.
+------+------+-----------+ 
23.
| id   | wert | sum(wert) | 
24.
+------+------+-----------+ 
25.
|    1 |   10 |        30 | 
26.
+------+------+-----------+ 
27.
1 row in set (0,00 sec) 
28.
 
29.
mysql> 
SUM() hat zwar richtig zusammen gerechnet, aber durch das GROUP BY `id` wird nur der erste Datensatz angezeigt.

Die Summen könnte man auch in der WHILE-Schleife(PHP) aufaddieren:
01.
$sum_in=0; 
02.
$sum_out=0; 
03.
$sum_balance=0; 
04.
while( $row=mysql_fetch_assoc($result) ) 
05.
06.
    echo 'spalte1, spalte2, spalte-in, spalte-out, spalte-balance'
07.
    $sum_in+=$row['in']; 
08.
    $sum_out+=$row['out']; 
09.
    $sum_balance+=$row['balance']; 
10.
11.
echo 'spalte1, spalte2, '.$sum_in.', '.$sum_out.', '.$sum_balance;

~Arano
Bitte warten ..
Mitglied: dax4fun
14.04.2014 um 17:52 Uhr
Danke für eure Mühe und Hilfe ich habe es hingebogen

@EvilMoe
1.Hab mir das schon vorher angeschaut Mysql Injection und habe es probiert anzuwenden "mysql_real_escape_string" aber es ging nicht (das Script), jetzt wo ich den Befehl gesucht habe um ihn hier einzufügen habe hab ich eine noch detaillierte Anleitung gefunden. Wenn es dir nicht schwer fällt bzw. es nicht viel Arbeit ist, könntest du es auf dieses Script anwenden.

2.keine Ahnung warum das sql nicht funktioniert ich hab es direkt in phpmyadmin eingefügt habe noch zu sum(IN) ' hinzugefügt und habe keine Fehlermeldung bekommen aber auch kein Ergebnis hab mehrere Varianten probiert ab und zu hab ich auch ein Ergebnis bekommen SUM IN, SUM OUT... doch alle mit 0 ???

$sql="SELECT SUM('IN'), SUM('OUT'), SUM('BALANCE') from global ......

@Arano
Habe es mit deiner Schleife hinbekommen funktioniert perfekt das habe ich auch gesucht und es schaut like Batch aus was mir noch mehr gefallen hat

aber eine Frage hab ich noch

01.
echo 'TOTAL IN '.$sum_in.', TOTAL OUT  '.$sum_out.' , TOTAL BALANCE  '.$sum_balance;
ich hab Stunden verbracht das echo zu formatieren ???? warum kommt nach '.$sum_balance kein ' mehr, schaut irgendwie asymmetrisch aus... bzw. ist es auch anders formatiert als das echo aus meinem Script
01.
echo "  SHOP: " . $row["SHOP"] .
???

Danke euch

mfG
Dax

nun Sieht es so aus:
Abfrage.php
01.
 
02.
<?php 
03.
 
04.
function safe($value){  
05.
   return mysql_real_escape_string($value);  
06.
}  
07.
    $_db_host = "xxx";            # meist localhost 
08.
    $_db_datenbank = "xxx"; 
09.
    $_db_username = "xxx"; 
10.
    $_db_passwort = "xxx"; 
11.
 
12.
$SHOP = $_POST['SHOP']; 
13.
$DATUM = $_POST['DATUM']; 
14.
 
15.
mysql_connect($_db_host, $_db_username, $_db_passwort); 
16.
mysql_select_db($_db_datenbank); 
17.
unset($host,$user,$pass,$_db_datenbank); 
18.
 
19.
$sql = "SELECT * FROM GLOBAL WHERE DATUM LIKE '$DATUM' AND SHOP LIKE '$SHOP'"; 
20.
 
21.
$result = mysql_query($sql) or die(mysql_error());; 
22.
 
23.
while($row = mysql_fetch_array($result)) { 
24.
 
25.
echo "  SHOP: " . $row["SHOP"] . "  DATUM: " . $row["DATUM"] . "  ULAZ: " . $row["IN"] .  "  IZLAZ: " . $row["OUT"] . "  BALANS: " . $row["BALANCE"] . "  TIKETA: " . $row["TICKETS"] . "  OP1: " . $row["ONL1"] .  "  OP1 TIKETA: " . $row["ONL1TICKETS"] . "  OP2: " . $row["ONL2"] . "  OP2 TIKETA: " . $row["ONL2TICKETS"] . "<hr>"; 
26.
 
27.
28.
 
29.
$sum_in=0; 
30.
$sum_out=0; 
31.
$sum_balance=0; 
32.
 
33.
$sqlb = "SELECT * FROM GLOBAL WHERE DATUM LIKE '$DATUM' AND SHOP LIKE '$SHOP'"; 
34.
 
35.
$resultb = mysql_query($sql) or die(mysql_error());; 
36.
 
37.
while( $rowb=mysql_fetch_assoc($resultb) ) 
38.
 
39.
40.
    $sum_in+=$rowb['IN']; 
41.
    $sum_out+=$rowb['OUT']; 
42.
    $sum_balance=$sum_in - $sum_out; 
43.
44.
echo 'TOTAL IN '.$sum_in.', TOTAL OUT  '.$sum_out.' , TOTAL BALANCE  '.$sum_balance; 
45.
?> 
46.
<br> 
47.
 
48.
<a href="global.html">Back 2 search</a><br> 
49.
 
Bitte warten ..
Mitglied: Arano
14.04.2014 um 20:03 Uhr
Hi,

bei meinem ECHO sind es zwei Dinge:
  1. Habe ich einfache Anführungszeichen (') verwendet und musste deswegen
  2. zusätzlich den Verkettungsoperator (.) (den Punkt) verwenden.

Die einfachen Anführungszeichen werden __nicht__ geparst. Das heist wenn eine Variable dazwischen steht, wird diese nicht durch ihren Wert ersetzt sondern es wird einfach "$variable" ausgegeben. Das ist natürlich schneller wenn der Text einfach ausgegeben werden kan ohne das nach möglichen Variablen gesucht werden muss. Aber was wenn man eine verwenden möchte?
Dann bricht man den Parameter auf echo <parameter>; und fügt die Variabel mit Hilfe des Verkettungsoperator ein.
01.
echo 'ersterteil ' 
02.
     .$variable 
03.
     .' zweiterteil'
04.
$foo='Welt'
05.
echo 'Hallo '.$foo;
Zu deinem neuem Script kann ich auch noch etwas sagen.
Das Ausrechnen der Bilanz macht doch erst Sinn, wenn alle IN- und OUT-Werte zusammenaddiert sind !
Jetzt errechnest du die Bilanz mit jedem Schleifendurchlauf. Das sind genau soviele Berechnungen wie die Datenbankabfrage Datensätze liefert - obwohl eine einzige Berechnung ganz am Ende reichen würde !

Darüber hinaus, kannst (solltest) du die beiden Schleifen kombinieren bzw. vereinen. Also die Berechnungen aus der zweiten Schleife kannst du genau so gut in die Erste einfügen.
Dann sparst du dir die zweite Datenbankabfrage und Schleife.


~Arano
Bitte warten ..
Mitglied: dax4fun
14.04.2014 um 20:38 Uhr
danke erst mal für das echo das muss ich noch probieren

zur Bilanz da sind Daten (noch nicht importiert sind noch in txt und unformatiert ) von einigen Monaten drin, aber die Abrechnung geschieht Monatlich somit bekomme ich eine Auflistung der einzelnen Shops bzw. sollten Daten fehlen kann ich das erkennen und nachfordern.Immerhin besser als früher einzelne txt Dateien piepen in eine txt dann importieren ins excel zusammenrechnen

ja hab jetzt strikt die Anfragen getrennt werd mal schauen das ich sie kürze

Bastle gerade an einem Script um die Datenbank zu füttern, habe 500+ txt Dateien in diesem Format

Inhalt von 555006....%datum%.txt
01.
SHOP_555006, in:188600, out:198128, balance:-9528, tickets:1113,
mal schauen wie weit ich komm

vielen danke erst mal

mfG
dax
Bitte warten ..
Neuester Wissensbeitrag
DSL, VDSL

Telekom versendet automatische Kündigungen

(4)

Erfahrungsbericht von Voiper zum Thema DSL, VDSL ...

Ähnliche Inhalte
Datenbanken
gelöst SQL-Abfrage mit "kleiner gleich" funktioniert nicht (2)

Frage von derSESO zum Thema Datenbanken ...

Datenbanken
gelöst SQL Abfrage - Ausgabe von Person mit Privat- und Dienstadresse (3)

Frage von CBruns zum Thema Datenbanken ...

Datenbanken
gelöst Verschachtelte SQL-Abfrage (4)

Frage von User1000 zum Thema Datenbanken ...

Batch & Shell
gelöst Powershell - Ausgabe gruppieren - gleichzeitig Werte in anderer Spalte addieren (9)

Frage von Affkopf89 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Windows 7
gelöst BOOTMGR is missing (auch nach bootrec -RebuildBcd) (21)

Frage von Mipronimo zum Thema Windows 7 ...

Windows Userverwaltung
Windows Freigabe: Zugriff auf alle Ordner trotz Sicherheitseinstellungen (18)

Frage von Pandreas zum Thema Windows Userverwaltung ...

Exchange Server
gelöst MS Exchange 2016 - Basicconfig Fragen (16)

Frage von maddig zum Thema Exchange Server ...

Windows Server
gelöst Rechte als Admin vergeben - Zugriff verweigert (14)

Frage von Ghost108 zum Thema Windows Server ...