SQL Abfrage mit Timestamp

fUnKuCh3n

Erfahrenes Mitglied
Hallo,

ich habe folgendes Problem, ich speichere in einer Tabelle mit dem Feld Timestamp und IP den aktuellen Timestamp und die aktuelle IP und jetzt möchte ich vergleich wenn der Timestamp dem heutigen Tag entspricht also das Datum des Timestamp = heute ist und die IP noch nicht für heute eingetragen ist dann soll er einen neuen Eintrag in die SQL Datenbank machen, jedoch weiss ich nicht so richtig wie ich das mit dem Timestamp vergleich machen soll, weils halt als Timestamp gespeichert wird.

Mein voriger Code ( aber mit Datum und Zeit noch ) sieht wie folgt aus:
PHP:
$query = mysql_query("Select * from $tbl[x4] where (ip = '$ip') AND (date = '$date')");
if( mysql_num_rows($query) < 1 ) {

MySQL_QUERY("INSERT INTO `$tbl[x4]` ( `ip`, `date`, `time` )
VALUES
('$ip', '$date', '$time')");
}
Das ganze soll eigentlich als einfacher Tages Counter arbeiten...

Liebe Grüße
 
Warum verwendest du einen Timestamp, wenns dir eh nur ums Datum geht? Könntest du nicht das Datum in deine Tabelle schreiben? Dann wird dein Vergleich einfacher.

Ansonsten kannst du mittels date den Timestamp in PHP umwandeln. Oder vielleicht sogar während der SQL-Abfrage mit SELECT DATE(dein_timestamp).
 
Zuletzt bearbeitet:
Ja, du hast schon recht aber mir geht es darum das ich alles vereinheitliche und da ich zum Größten Teil schon Timestamps benutze dachte ich dass ichs da auch machen werde. Aber sollte sich hier keine Lösung finden mach ichs wie vorher ;)
 
Ich finde den Timestamp dafür hervorragend :)

Ich habe das Problem wie folgt gelöst:
PHP:
$today = bcdiv(time(),86400,0);
Ich Teile also den aktuellen Zeitstempel durch die Anzahl der Sekunden für einen Tag. Damit hätte ich ale "Heute" herausgefunden.
Code:
$yesterday = bcdiv(time(),86400,0)-1;
Dies würde dann "Gestern" entsprechen ;) Ich finde das eigentlich sehr einfach und so brauch ich nichts mit date() umzuwandeln!


Gruß Radhad
 
hmm, irgendwie versteh ich deine Aktion net *g* Also wie würde das denn in der Abfrage angewandt werden bzw wie arbeite ich das mitm Timestamp ab? Einfach anstelle von time(); ?
 
Ich habe das Problem wie folgt gelöst:
PHP:
$today = bcdiv(time(),86400,0);
So wie ich saschax' Problem verstehe, sollte der Check bereits im SQL-Statement durchgeführt werden und nicht mittels PHP.

Ansonsten könntest du dir alle Timestamps einer IP rein anhand der ID aus der Tabelle suchen und diese dann mit PHP-Funktionen überprüfen. Eine SQL-Lösung wäre aber sicherlich schöner.
 
So könnts mit SQL in MySQL funktionieren:

Code:
..AND (timestamp > (CURRENT_TIMESTAMP()-(CURRENT_TIMESTAMP()%86400)))

Wenn man vom aktuellen Timestamp die Sekunden des heutigen Tages (modulo-Operation) abzieht, erhält man den Timestamp von heute Mitternacht. War der Besucher heute schon da, muss der Timestamp dieses Besuchs größer sein als der Mitternachts-Timestamp.

Gut möglich, dass es eine einfachere Lösung gibt :)
 
Hmm... im ersten Moment dachte ich, das wäre falsch.

Hast quasi meins gut umgesetzt um das Abfrage-Ergebnis zu verringern. Sieht gut aus :)

Aber im Endeffekt wird das Ergebnis ja in PHP ausgewertet ^^
 
Hey, ich habe nun noch mal ein bisschen rumgetüddelt und irgendwie bekomme ich die Sache trotzdem nicht zum laufen, wenn ich folgenden SQL String in phpMyAdmin ausführen will:
Code:
Select * from counter where (ip = 'meine momentane ip') AND (timestamp > (CURRENT_TIMESTAMP()-(CURRENT_TIMESTAMP()%86400)))


= >Ihr SQL-Befehl wurde erfolgreich ausgeführt.

Aber ich erhalte keine Ergebnisse.
 
Zurück