php-resource



Zurück   PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr > Entwicklung > PHP Developer Forum
 

Login

 
eingeloggt bleiben
star Jetzt registrieren   star Passwort vergessen
 

 

 


PHP Developer Forum Hier habt ihr die Möglichkeit, eure Skriptprobleme mit anderen Anwendern zu diskutieren. Seid so fair und beantwortet auch Fragen von anderen Anwendern. Dieses Forum ist sowohl für ANFÄNGER als auch für PHP-Profis! Fragen zu Laravel, YII oder anderen PHP-Frameworks.

Antwort
 
LinkBack Themen-Optionen Bewertung: Bewertung: 2 Stimmen, 3,00 durchschnittlich.
  #16 (permalink)  
Alt 31-12-2012, 19:51
Cetax
 Registrierter Benutzer
Links : Onlinestatus : Cetax ist offline
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 31
Cetax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Stimmt habe ich auch gerade gesehen, manchmal geht aber auch alles durcheinander...

So nun sehe ich Balken, aber irgendwie glaub ich nicht, das das so richtig ist...
https://dl.dropbox.com/u/80052077/Te...g/SQL_Gas8.png

Also, vielleicht mal von von angefangen!
Wie sieht denn so eine Abfrage der DB aus, wenn ich den Tagesverbrauch als Balkendiagramm angezeigt bekommen möchte ?

Mein Anfang:
PHP-Code:
$sql "SELECT id, DATE_FORMAT(datumzeit,'%Y.%m.%d') AS DATUM, DATE_FORMAT(datumzeit,'%H:%i:%s') AS ZEIT, GZStand FROM Gas WHERE `datumzeit` >= date_sub(now(), interval 24 hour) AND `datumzeit` <= now()  GROUP BY DATE_FORMAT(datumzeit, '%Y-%m-%d %H:%i') ORDER BY datumzeit DESC";

$result mysql_query($sql) OR die(mysql_error()); 

$i=0
while (
$array=mysql_fetch_array($result)) { 
    
$id[$i]=$array[0];
        
$datum[$i]=strtotime($array[1]);
    
$GZStand[$i]=$array[2];
$i++; 

Die DB sieht so aus:
id | datumzeit(Typ datetime) | GZStand(Typ float(8,2))
1 | 2012-12-31 16:30:34 | 8652.56

Kann mir jemand unter die Arme greifen ?
Oder müssen wir bei der DB anfangen ?
Müssen die Daten anders eingetragen werden ?

Vielen Dank

Gruß
Stefan
Mit Zitat antworten
  #17 (permalink)  
Alt 31-12-2012, 20:08
boeserfrosch
 Registrierter Benutzer
Links : Onlinestatus : boeserfrosch ist offline
Registriert seit: Nov 2009
Beiträge: 93
boeserfrosch befindet sich auf einem aufstrebenden Ast
Standard

Du musst doch im endeffekt nur die differenz zwischen dem heutigen Gasstand und dem gestrigen ermitteln. Dann solltest du schon das haben was du haben wolltest ....
Mit Zitat antworten
  #18 (permalink)  
Alt 01-01-2013, 01:17
Cetax
 Registrierter Benutzer
Links : Onlinestatus : Cetax ist offline
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 31
Cetax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Ja ich weiß, nur wenn ich das wüsste, wie das geht,
dann würde ich hier ja nicht um Hilfe bitten.
Ich weiß ja nicht wie man die DB abfragt so abfragt.

Please Help

Danke und ein Frohes neues Jahr....


Gruß
Stefan
Mit Zitat antworten
  #19 (permalink)  
Alt 01-01-2013, 01:55
boeserfrosch
 Registrierter Benutzer
Links : Onlinestatus : boeserfrosch ist offline
Registriert seit: Nov 2009
Beiträge: 93
boeserfrosch befindet sich auf einem aufstrebenden Ast
Standard

Mir fällt da innerhalb der Datenbankabfrage keine Lösung für ein.
Brauch man aber auch nicht.
Du kannst das genauso gut im PHP machen.

PHP-Code:
$i=0;  
$temp 0;
while (
$array=mysql_fetch_array($result)) {  
    
$id[$i]=$array[0]; 
        
$datum[$i]=strtotime($array[1]); 
    
$GZStand[$i]= ($array[2]-$temp); 
$temp $array[2];
$i++;  

Dann hast du einzig noch den ersten Wert mit dem Anfangsgasstand.

Dir und natürlich auch den anderen auch ein frohes neues Jahr.
Mit Zitat antworten
  #20 (permalink)  
Alt 01-01-2013, 04:14
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Ein frohes, glückliches und gesundes neues Jahr!

Nimm die Lösung vom bösen Frosch, es geht zwar auch mit reinem SQL, aber die einfache Lösung ist nicht kompatibel und die kompatible Lösung würde zwei Self Left Joins benötigen und wäre damit nicht besonders performant.

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
  #21 (permalink)  
Alt 01-01-2013, 05:06
boeserfrosch
 Registrierter Benutzer
Links : Onlinestatus : boeserfrosch ist offline
Registriert seit: Nov 2009
Beiträge: 93
boeserfrosch befindet sich auf einem aufstrebenden Ast
Standard

Hallo AmicaNoctis
auch wenn die Lösung mit den zwei Self Left Joins nicht performant ist würde mich dennoch die Lösung interessieren.

Man lernt ja schließlich nie aus

Also falls du Zeit und Muße hast würde mich das wahrlich interessieren .

böserfrosch
Mit Zitat antworten
  #22 (permalink)  
Alt 01-01-2013, 13:16
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

Zitat:
Zitat von boeserfrosch Beitrag anzeigen
Also falls du Zeit und Muße hast würde mich das wahrlich interessieren .
Okay, also dann:

Code:
SELECT
	g1.*,
	g2.*,
	g2.gzstand - g1.gzstand AS delta
FROM gas AS g1
LEFT JOIN gas AS g2 ON g2.datumzeit > g1.datumzeit
LEFT JOIN gas AS g3 ON g3.datumzeit > g1.datumzeit AND g3.datumzeit < g2.datumzeit
WHERE g3.id IS NULL AND g2.id IS NOT NULL;
Mit dem ersten Join holt man sich zu jedem linken Datensatz G1 alle rechten Datensätze G2 ins Kreuzprodukt, deren Zeitstempel größer ist. Der zweite Join erweitert das Kreuzprodukt um alle Datensätze G3, die dem Zeitstempel nach zwischen G1 und G2 liegen. Da es ein Left Join ist, wird G3 an den Stellen NULL, wo es keinen Datensatz gibt, der zwischen G1 und G2 liegt, also wo G1 und G2 unmittelbare „Zeitstempelnachbarn“ sind.

Das wiederum nutzt man in der Where-Klausel aus, indem man alle Datensätze des Kreuzprodukts ignoriert, in denen G3 nicht NULL geworden ist, also G1 und G2 keine Nachbarn sein können, weil es noch etwas dazwischen gab.

Zu guter Letzt ignorieren wir noch den aktuellsten Datensatz von G1, denn es gibt keinen G2 mehr danach (g2.id IS NOT NULL), mit dem wir ihn vergleichen können und er selbst wurde ja schon mit dem vorletzten verglichen.

Dass ich immer die Primärschlüsselspalte für IS (NOT) NULL nehme, liegt ganz einfach daran, dass die nie NULL sein darf und damit der beste Kandidat dafür ist, festzustellen, ob aufgrund eines Outer Joins eine der beiden Seiten komplett durchgenullt wurde.

Amica
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!

Geändert von AmicaNoctis (01-01-2013 um 13:24 Uhr)
Mit Zitat antworten
  #23 (permalink)  
Alt 01-01-2013, 16:50
boeserfrosch
 Registrierter Benutzer
Links : Onlinestatus : boeserfrosch ist offline
Registriert seit: Nov 2009
Beiträge: 93
boeserfrosch befindet sich auf einem aufstrebenden Ast
Standard

Interessante herangehensweise.

Vielen Dank für deine Mühe.
Mit Zitat antworten
  #24 (permalink)  
Alt 01-01-2013, 22:36
Cetax
 Registrierter Benutzer
Links : Onlinestatus : Cetax ist offline
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 31
Cetax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hallo Boeserfrosch,
erstmal vielen Dank für deine tolle Hilfe.
Ich bin jetzt schon ein riesiges Stück weiter und glaube auch nun einiges mehr Verstanden zu haben.
Ich habe deinen Befehl jetzt erweitert und bekomme nun die DB Einträge angezeigt,
PHP-Code:
$sql "
SELECT id, DATE_FORMAT(datumzeit,'%Y.%m.%d') AS DATUM, DATE_FORMAT(datumzeit,'%H:%i:%s') AS ZEIT, GZStand 
FROM Gas 
WHERE `datumzeit` >= date_sub(now(), interval 1 hour) AND `datumzeit` <= now()  
GROUP BY DATE_FORMAT(datumzeit, '%Y-%m-%d %H:%i:%s') 
ORDER BY datumzeit ASC"
// Sortierung -> ASC = 10 9 8 7 6... DESC = 1 2 3 4 5 ...

$result mysql_query($sql) OR die(mysql_error()); 

$i=0;  
$temp_id 0;
$temp_datum 0;
$temp_uhrzeit 0;
$temp_GZStand 0;
while (
$array=mysql_fetch_array($result)) {  
     
$id[$i] = $array[0]; 
     
$datum[$i] = strtotime($array[1]-$temp1); 
     
$uhrzeit[$i] = $array[2];
     
$GZStand[$i] = $array[3];
 
$temp_id $array[0];
$temp_datum $array[1];
$temp_uhrzeit $array[2];
$temp_GZStand $array[3];

$i++;

 
print_r ($temp_id);
echo 
'&nbsp;';
 
print_r ($temp_datum);
echo 
'&nbsp;';
 
print_r ($temp_uhrzeit);
echo 
'&nbsp;';
 
print_r ($temp_GZStand);
echo 
'<br>';

Damit sieht meine Ausgabe nun so aus:
https://dl.dropbox.com/u/80052077/Te...g/SQL_Gas9.png

Das ist ja schon mal klasse
Aber Ich wäre ja nicht hier, wenn ich nicht noch mehr wissen möchte.

Also, ich versuche mich gerade daran, die Spalte 'id' in ein ARRAY zu packen, ich weiß aber ach nicht ob das richtig ist, aber weiter, vielleicht wird es ja verständlich...

Mit diesem SQL Befehl habe ich die Ausgabe auf 1 Stunde beschränkt:
PHP-Code:
$sql "
SELECT id, DATE_FORMAT(datumzeit,'%Y.%m.%d') AS DATUM, DATE_FORMAT(datumzeit,'%H:%i:%s') AS ZEIT, GZStand 
FROM Gas 
WHERE `datumzeit` >= date_sub(now(), interval 1 hour) AND `datumzeit` <= now()  
GROUP BY DATE_FORMAT(datumzeit, '%Y-%m-%d %H:%i:%s') 
ORDER BY datumzeit ASC"

Wie bekomme ich die einzelnen id's addiert oder Summiert? in ein 'array' ? (Ich hoffe ihr versteht was ich meine)
Bsp:

id
---------
102
103
104
105
106

Das array soll dann so aussehen : array(5);

Also das sozusagen alle 'id' addiert.

Ich hoffe Ihr versteht was ich meine, ich weiß nämlich nicht wonach ich suche
Ich dachte da an "array_sum()" aber weiß nicht genau wie ich das einsetzten soll.
Weil das addiert ja die Einträge (bei meinem Bsp. 520)


@AmicaNoctis
Auch Vielen Dank von mir für die Ausführliche Erklärung, wobei ich gestehen mus das ich noch sehr wenig davon verstehe
Ich ich werde den jetzt mal zum Testen und verstehen probieren.

Besten Dank euch beiden !!

Gruß
Stefan

Geändert von Cetax (01-01-2013 um 22:40 Uhr)
Mit Zitat antworten
  #25 (permalink)  
Alt 01-01-2013, 23:01
boeserfrosch
 Registrierter Benutzer
Links : Onlinestatus : boeserfrosch ist offline
Registriert seit: Nov 2009
Beiträge: 93
boeserfrosch befindet sich auf einem aufstrebenden Ast
Standard

Durch diese Zeile:
PHP-Code:
$id[$i] = $array[0]; // Es geht auch $id[$i] = $array["id"]; 
packst du bereits alle ID´s in ein Array.

Wenn ich dich richtig verstehe willst du nicht die summe der Ids , was auch absolut keinen sinn macht, sondern du möchtest wissen wie viele Einträge in deinem Array sind.

Schau dir dazu mal count() an

Bei deinem Beispiel mit

id
---------
102
103
104
105
106

würde ein count() angewant auf $id also count($id)
eine 5 zurück liefern.

Allerdings brauchst du das in diesem fall nochnichtmal tun, da du die anzahl der Daten ja sowieso schon in $i stehen hast.

Ich hoffe ich hab dich da jetzt richtig verstanden.
Mit Zitat antworten
  #26 (permalink)  
Alt 01-01-2013, 23:19
Cetax
 Registrierter Benutzer
Links : Onlinestatus : Cetax ist offline
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 31
Cetax ist zur Zeit noch ein unbeschriebenes Blatt
Standard

Hi,
hast mich richtigverstanden

Ok, verstehe nur zur hälfte...
Zitat:
Allerdings brauchst du das in diesem fall nochnichtmal tun, da du die anzahl der Daten ja sowieso schon in $i stehen hast.
Wie bekomme ich die dann angezeigt ?
Irgendwie stehe ich ganz schön auf dem Schlauch...

Also wenn ich
PHP-Code:
print_r ($id[$i]); 
Dann kommt das raus : jztj

Mit Zitat antworten
  #27 (permalink)  
Alt 01-01-2013, 23:29
boeserfrosch
 Registrierter Benutzer
Links : Onlinestatus : boeserfrosch ist offline
Registriert seit: Nov 2009
Beiträge: 93
boeserfrosch befindet sich auf einem aufstrebenden Ast
Standard

Vor deiner while-Schleife definierst du die Variable $i und weißt ihr den wert 0 zu.

Mit der while-schleife gehst du ja ,wie du wahrscheinlich gemerkt hast ,jeden einzelnen deiner Datensätze durch und weißt verschiedene Werte deiner Datensätze verschiedenen Arrays zu.

siehe zum Beispiel hier :
PHP-Code:
$id[$i
das $i wird benutz um zu definieren unter welchen schlüssel der jeweilige wert in dem Array abgelegt wird.
Damit nicht immer wieder im Array der Wert überschrieben wird muss sich der Schlüssel ändern.
Dies wird erreicht durch die inkrementierung der Variable $i
siehe
PHP-Code:
$i++; 
wenn die While-Schleife jetzt also fünfmal durchlaufen wird ändert sich der Wert wie folgt:

0 <- $i vor while
1
2
3
4
5 <- Endwert nach fünfmaligen durchlaufen der While-Schleife.

$i kannst du jetzt verwenden wie du möchtest.
z.B. zum ausgeben:
PHP-Code:
echo $i
Mit Zitat antworten
  #28 (permalink)  
Alt 02-01-2013, 21:00
Cetax
 Registrierter Benutzer
Links : Onlinestatus : Cetax ist offline
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 31
Cetax ist zur Zeit noch ein unbeschriebenes Blatt
Wink

@boeserfrosch


Göttlich ......
Mein Retter !!

Mehr Info später.....
Mit Zitat antworten
  #29 (permalink)  
Alt 06-01-2013, 23:19
Cetax
 Registrierter Benutzer
Links : Onlinestatus : Cetax ist offline
Registriert seit: Feb 2009
Ort: Niedersachsen
Beiträge: 31
Cetax ist zur Zeit noch ein unbeschriebenes Blatt
Thumbs up

Soo...
Also meine MySQL-DB frage ich mit folgendem Befehl ab:
PHP-Code:
SELECT idDATE_FORMAT(datumzeit,'%Y.%m.%d') AS DATUMDATE_FORMAT(datumzeit,'%H:%i:%s') AS ZEITGZStand 
FROM Gas 
WHERE DATE
(datumzeit) = DATE(NOW())
GROUP BY DATE_FORMAT(datumzeit'%Y-%m-%d %H:%i:%s'
ORDER BY datumzeit ASC"; 
Damit zeige ich den Verbrauch von Heute an.

Vielen Dank @boeserfrosch für die tolle Hilfe hier im Forum.



Gruß
Stefan

Geändert von Cetax (07-01-2013 um 01:04 Uhr)
Mit Zitat antworten
  #30 (permalink)  
Alt 07-01-2013, 04:38
AmicaNoctis
  Moderatorin
Links : Onlinestatus : AmicaNoctis ist offline
Registriert seit: Jul 2009
Beiträge: 5.709
Blog-Einträge: 9
AmicaNoctis sorgt für eine eindrucksvolle AtmosphäreAmicaNoctis sorgt für eine eindrucksvolle Atmosphäre
Standard

@Cetax, wenn du so zufrieden bist, hast du sicher die 5 Sekunden Zeit, dem Bösen Frosch deinen Dank durch eine Bewertung des ausschlaggebenden Beitrags (über das Waage-Symbol oben rechts) kund zu tun
__________________
Hast du die Grundlagen zur Fehlersuche gelesen? Hast du Code-Tags benutzt?
Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
Super, danke!
Mit Zitat antworten
Antwort

Lesezeichen


Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
 

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Frage zu Datenbank Design, Fremdschlüssel und Abfrage 2Bad4You SQL / Datenbanken 3 05-03-2010 01:37
[GD] JPGRAPH und Datum ManiacW PHP Developer Forum 0 03-05-2006 11:15
Datenbank erstellen und ne Abfrage dazu....wie? crayzee Projekthilfe 11 25-06-2005 14:48
jpgraph und smarty mukraker PHP Developer Forum 48 07-05-2004 22:18
abfrage von lokaler und online-datenbank ausgeben bastian SQL / Datenbanken 6 07-09-2002 11:16

Themen-Optionen
Thema bewerten
Thema bewerten:

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


PHP News

ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlicht
ebiz-trader 7.5.0 mit PHP7 Unterstützung veröffentlichtDie bekannte Marktplatzsoftware ebiz-trader ist in der Version 7.5.0 veröffentlicht worden.

28.05.2018 | Berni

Wissensbestand in Unternehmen
Wissensbestand in UnternehmenLebenslanges Lernen und Weiterbilden sichert Wissensbestand in Unternehmen

25.05.2018 | Berni


 

Aktuelle PHP Scripte

ADSMAN V3 - Werbe-Manager ansehen ADSMAN V3 - Werbe-Manager

ADSMAN V3 - mehr als nur ein Bannermanager! Banner, Textanzeigen und PagePeel Manager! Mit ADSMAN PRO haben Sie die Marketinglösung für eine effektive und effiziente Werbeschaltung mit messbaren Ergebnissen. Unterstützt werden Bannerformate in beliebi

25.10.2018 virtualsystem | Kategorie: PHP/ Bannerverwaltung
PHP News und Artikel Script V2

News schreiben, verwalten, veröffentlichen. Dies ist jetzt mit dem neuen PHP News & Artikel System von virtualsystem.de noch einfacher. Die integrierte Multi-User-Funktion und der WYSIWYG-Editor (MS-Office ähnliche Bedienung) ermöglichen...

25.10.2018 virtualsystem | Kategorie: PHP/ News
Top-Side Guestbook

Gästebuch auf Textbasis (kein MySQL nötig) mit Smilies, Ip Sperre (Zeit selbst einstellbar), Spamschutz, Captcha (Code-Eingabe), BB-Code, Hitcounter, Löschfunktion, Editierfunktion, Kommentarfunktion, Kürzung langer Wörter, Seiten- bzw. Blätterfunktion, V

22.10.2018 webmaster10 | Kategorie: PHP/ Gaestebuch
 Alle PHP Scripte anzeigen

Alle Zeitangaben in WEZ +2. Es ist jetzt 17:50 Uhr.