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, 4500 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
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Datenbanken
gelöst SQL-Abfrage - DISTINCT - letztes Datum (3)

Frage von emeriks zum Thema Datenbanken ...

Datenbanken
SUM oder AVG in SQL Abfrage dauert viel zu lange warum? (5)

Frage von samet22 zum Thema Datenbanken ...

Datenbanken
gelöst SQL-Abfrage mit MAX() (9)

Frage von FrAmEr zum Thema Datenbanken ...

Datenbanken
gelöst Schleifen in SQL-Abfrage bei 2 Tabellen (2)

Frage von Aximand zum Thema Datenbanken ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (20)

Frage von Xaero1982 zum Thema Microsoft ...

Outlook & Mail
gelöst Outlook 2010 findet ost datei nicht (19)

Frage von Floh21 zum Thema Outlook & Mail ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...