18:57. 18:58, 18:59.... ???

Feldhofe

Erfahrenes Mitglied
Hallo!

Ich bräuchte mal jemanden, der mir einen Tipp geben kann!
Und zwar geht es darum, daß ich alle Einträge aus der DB auslesen will, die jünger als 10 Minuten sind.

Dazu gibts erstmal den Code hier (habe alle Angaben, auch Jahr etc. reingebaut, für spätere Änderungen)
PHP:
// das gibt die Zeitspanne an, z.B. 15 für "vor 15 Minuten"
$spanne=15;
//



// das gibt das aktuelle Datum in Einzelvariablen aus!
$jahr=date("Y");
$monat=date("m");
$tag=date("d");
$stunde=date("H");
$minute=date("i");
//


// hier werden die EINZELNEN Variablen -$spanne gerechnet,
// also am 1. Januar um 0:00 erscheint auch das Datum des alten Jahres!
$tag1= date("d", mktime($stunde,$minute-$spanne,0,$monat,$tag, $jahr));
$monat1= date("m", mktime($stunde,$minute-$spanne,0,$monat,$tag, $jahr));
$jahr1= date("Y", mktime($stunde,$minute-$spanne,0,$monat,$tag, $jahr));
$stunde1= date("H", mktime($stunde,$minute-$spanne,0,$monat,$tag, $jahr));
$minute1= date("i", mktime($stunde,$minute-$spanne,0,$monat,$tag, $jahr));
//

Nun könnte ich ja einfach eine DB-Anweisung machen, select * from tabelle where stunde >= $stunde1 AND minute >= $minute1...

Das Problem dabei ist allerdings:
Lassen wir die aktuelle Zeit ($stunde $zeit)
19:07 sein.

Dann ist ($stunde1 $zeit1) 18:57.

Mit dem oben genannten Befehl
werden diese Uhrzeiten angewählt:

18:57
18:58
18:59

diese aber nicht:
19:00
19:01 usw., weil $minute1 mit den 0-er-Zahlen kleiner ist als die hohen 59er-Zahlen.

Wie kann ich das umgehen?
Wie kann ich alle Zahlen selektieren, die zwischen den Uhrzeiten liegen??


Gruß
Feldhofe
 
tja

naja ich kenn mich mit datum datum in mysql net so gut aus, aber könntest du nicht die akuelle uhrzeit - 1 std speichern ($vor_einer_stunde) und dann abfragen.......

select * from my_data_base where datum >= $vor_einer_stunde order by datum asc;


???? keine ahnug ob man das so machen kann.....

//bad taste
 
Re: tja

Nein, da geht ja gerade leider nicht!
Ich muß die Variablen $stunde und $minute einzeln abfragen, da ist ja auch das Problem!

Das wäre viel einfacher, wenn ich eine Variable allein für das Datum hätte, in der alles drinsteckte. Dann könnte man das so abfragen.
Oder gibts sowas doch??

Mit Zeiten rechnen ist ja immer etwas komplizerter, weil sich da dieses praktische 10er-System noch nicht durchgesetzt hat... :-)

Feldhofe


Eigentlich brauche ich ja einfach etwas, daß mir alle Variablen ausgibt, die zwischen zwei Zeiten liegen!
 
Warum denn alles so schwierig machen? Es gibt doch mySQL den Datentyp "DATETIME". Dort wird eine Zeitangabe im Format "YYYY-MM-DD HH:MM:SS" gespeichert. Dieser Wert lässt sich vergleichen.

Man braucht jetzt nur mit der Funktion strftime() eine Zeichenkette zu erstellen, die genau den Wert zurückgibt, der vor 10min da war.

PHP:
// Früheren Zeitpunkt errechnen.
$alte_zeit = strftime ("%Y-%m-%d %H:%M:%S", time ()-600);

// Datenbankverbindung...

$sql = "SELECT * FROM tabelle WHERE datum > $alte_zeit";
$result = mysql_result ($sql);

Das ganze habe ich jetzt aber nicht getestet. Kannst es ja mal ausprobieren.
 
jo

jo davon war ich ausgegangen ich hatte deinen beitrag net so genau gelesen:) hihi sorry

also nur mal so....

es gibt:

datetime YYYY-MM-DD HH:MM:SS
date YYYY-MM-DD
time HH:MM:SS
year YYYY
timestamp (weiss ich net genau:-)

am besten legste dir zwei neue spalten in deiner tabelle an, wo dann datum und uhrzeit drin stehen.....und dann schreibste dir noch ein script, dass einmal alle deine einträge ausliest und dann zusammengefügt in die neuen spalten schreiben.....
 
hmmmm....
warum denn einfach wenns auch kompliziert geht?

nimm einfach timestamps, des is die allereinfachste methode, da sparst dir deine 1000 zeilen code da...
 
Nee, das mit dem Datum da (Datetime mein ich) ist schon besser, weil für mich übersichtlicher!
Ich will ja nicht nur die Einträge der letzten 10 Minuten ausgeben, sondern auch des gesamten Tages und des Vortages, und da ist es einfach praktischer, wenn ich das Datum als "richtiges" Datum drinstehenen habe und nicht als Millisekunden seit 1970!

Also das von workaholic gefällt mir am besten /mySql-Type DATETIME), wie man den Wert vor 10 Minten ausrechnet, ist mir schon klar, aber was lasse ich denn in die Datenbank eintragen, jedes Mal, wenn das Script aufgerufen wird??

Feldhofe
 
Hi!

Also ich hab das so ausprobiert, wie du gesagt hattest. Tabelle "Besucher", eine Spalte, in die das Datum eingetragen wird:

PHP:
<? echo "<link rel=stylesheet type='text/css' href='formate.css'>";

include("db_open_close.php");
 db_open ();



$datum=strftime ("%Y-%m-%d %H:%M:%S");

mysql_query("INSERT INTO besucher VALUES ('$datum')");

//Früheren Zeitpunkt errechnen.
$alte_zeit = strftime ("%Y-%m-%d %H:%M:%S", time ()-600);

//$sql = "SELECT * FROM tabelle WHERE datum > $alte_zeit";
//$result = mysql_result ($sql);


   $result = mysql_query("SELECT count(*) FROM besucher WHERE zeit > $alte_zeit");

  print "
<body bgcolor='#3366CC' text='white' link='yellow' vlink='yellow' alink='red'>
  <font face=verdana class=gross><b>Deutsche Übersetzungen.<b></font>

  <p><br>



        <table border=0>
        <tr><td align=left width=130>Zahl</td></tr>


";


   function print_result_table1($result)
   {
   while ($row = mysql_fetch_row($result))
           {
           print"
           <tr><td>
$row[0]
</td></tr>";
         }

   echo"      </table>";

  }
print_result_table1($result);


?>

Geht aber leider nicht, liegt an dem WHERE-Statement (WHERE zeit > $alte_zeit), ohne das wird die Gesamtzahl der Einträge angegeben, das funktioniert.

Hmm...was nun?

Gruß
Feldhofe
 
Ich denke mal der Fehler lag wirklich in meiner WHERE-Klausel.
PHP:
// So ist's falsch:
$result = mysql_query("SELECT count(*) FROM besucher WHERE zeit > $alte_zeit");

// So ist's richtig:
$result = mysql_query("SELECT count(*) FROM besucher WHERE zeit > '$alte_zeit'");

Ich denke mal mit den Hochkommas müsste es eigentlich gehen. Ansonsten einfach nochmal posten.
 
Tatsächlich!

Danke!!
Hab die ganze Zeit rumprobiert, aber da hätte ich echt selber draufkommen müssen...

Jetzt funktioniert es wunderbar!
Feldhofe
 
Zurück