Zeitunterschied mysql
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
bedingung
beitrag
counter
date
eintrag
format
formen
fragen
funktion
insert
konstant
loten
result
speicher
stunden
tabelle
user
vergleich
vergleichen
zeitpunkt
-
Hey Leute,
also ich hab ne Tabelle, in der ich IP-Adressen speicher, jeweils dazu das Datum und die Zeit als Datetime, wann sie eingetragen wurde. Jetzt möchte ich aus der Tabelle alle einträge löschen, die älter als eine Stunde sind.
Ich klar, ich mach\'s mit DELETE und als WHERE Bedingung geb ich das dann eben ein, aber wie?
Ich habs erst mit DATEDIFF und TIMEDIFF versucht, die geben mir ja den Abstand zwischen den Zeitpunkten zurück, aber wie kann ich dann prüfen, ob das jetzt größer oder kleiner als eine Stunde ist?
Wie würdet ihr das machen? Hab schon ewig im web gesucht...
thx a lot,
munich -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Die IP mit dem Timestamp eintragen (PHP Fkt. \"time ()\").
Dann einfach in der MySQL Bedingung \"WHERE `feld` < \'.time () - 60*60.\'\". // 60 Sekunden * 60 = eine Stunde -
Aso, du nutzt den Timestamp von MySQL?
Dann schreibe es doch einfach dementsprechend um:
\"WHERE `feld` < (MYSQL_TIMESTAMP_FUNKTION - 3600)\"
Die Konstante \"MYSQL_TIMESTAMP_FUNKTION\" solltest du natürlich entsprechend ersetzen. -
ähm, okay, mir is ned ganz klar was du meinst.
Also Feld is ja der Wert aus der mysql Tabelle, der liegt von in dem Format des mysql datetime, also als yyyy-mm-dd hh:mm:ss
Und das datum in PHP liegt ja quasi als timestamp, also als Zahl vor, das seh ich richtig, oder?
Naja, das heißt ja ich vergleiche Äpfel mit Birnen, also muss ich eines der Daten konvertieren. Am einfachsten wäre hald denk ich den timestamp in ne mysql datetime zu verwandeln und dann die beiden mit na mysql funktion zu vergleichen, z.B. DATEDIFF oder TIMEDIFF. Frage hier bloß, gibts eine Funktion, die beides zum Vergleich nutzt, weil es ja sonst Probleme mit Mitternacht geben könnte. -
Hey,
ich hab jetzt die MYSQL-Funktion UNIX_TIMESTAMP gefunden, allerdings klappt mein Vergleich trotzdem ned wirklich, ich habs so probiert:
$sql=\"...WHERE
UNIX_TIMESTAMP(time)<\".(time() - 60*60);
das klappt aber so hald ned, vllt. könnt ihr mir da weiterhelfen... -
Warum machst du dir es so schwer?
Nimm doch gleich die PHP-Funktion time(), um das Datum in der Datenbank zu speichern. So hast du das Problem mit dem unterschiedlichen Zeitformat erst gar nicht ;)
Beitrag geändert: 23.9.2007 13:21:43 von sesch -
hmhmhm, okay, was mach ich jetzt, ich bin langsam verwirrt. Also, in meiner mysql datenbank nehm ich dann also für die Zelle die einstellung TIMESTAMP.
So, muss da jetzt ein Timestamp rein, oder in welcher Form muss ich das eintragen? Ich würd jetzt einfach gern nen Unix-Teimestamp wie in PHP in die Tabelle speichern und dann eben mit aktuellem Timestamp-3600 vergleichen.
Was stell ich in der Zelle ein, damit ich Timestamps speichern kann??? und mit welcher Funktion bekomm ich den aktuellen UNIX-Timestamp? -
Was du in der Zelle der datenbank einstellt ist egal, du kannst einfach INT oder VARCHAR nehmen.
Und dann
$date = time(); // = Unixzeit
bzw.
$date2 = time() - 3600; -
Ich weiß ned, ich glaub ich hab ein grundlegendes Problem mit meinem Verständnis für MYSQL, hier is mein query zum eintragen der IP, der funktioniert auch ned, ich seh aber echt keinen Fehler:
$sql=\"INSERT INTO spam-contact
(ip,time)
VALUES
(\".$_SERVER[\'REMOTE_ADDR\'].\",\".time().\")\";
Der Plan ist, dass in die Tabelle spam-contact in die Spalten ip und time die IP des Users und der aktuelle Timestamp eingetragen werden. Auf welches Format muss ich denn die Zelle in der Datenbank für time stellen? -
autsch, das ganze Problem is der Bindestrich im Namen der Tabelle...
-
okay, jetzt läufts fast, nur ein Problem hab ich noch. Ich möchte jetzt überprüfen wie oft die IP des jeweiligen Nutzers schon in der Tabelle steht. Mein Plan war, dass ich hald alle Zellen mit der IP des users in ne Ergebnistabelle speichern lass und dann hald die Anzahl der Reihen zählen lass.
Hier mein Ansatz:
$sql=\"SELECT
ip
FROM
spamcontact
WHERE
ip=\'\".$_SERVER[\'REMOTE_ADDR\'].\"\'\";
$result=mysql_query($sql) OR die(mysql_error());
Damit sollten in der Ergebnistabelle dann genau so viele Einträge sein wie oft die IP des Users in der Tabelle steht.
Und dann lass ich die Einträge zählen:
$counter=0;
while($row = mysql_fetch_assoc($result)) {
$counter++;
}
Aber irgendwie klappt das ned, wär klasse wenn ihr mal den Code durchschaun könntet.
Es gibt keine errors, von daher isses wohl ein logischer Fehler...
thx -
mysql_num_rows() verwenden? http://de2.php.net/mysql-num-rows
Beitrag geändert: 23.9.2007 15:20:36 von tct -
okay, das hat super geklappt, thx a lot!
-
ach, ne Frage hab ich noch, jetzt ned dazu, aber zu was ähnlichen. Hab schon ewig gegoogelt und im Board gesucht, aber leider keine einfache Lösung gefunden. Wie berechne ich aus dem Geburtsdatum (in einer mysql datenbank im format date gespeichert) das Alter der Person?
Gibts da irgendne fertige php Funktion oder irgendwas einfaches?
thx,
munich -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage