Archiv verlassen und diese Seite im Standarddesign anzeigen : Curdate() - Problem
infeloba 01-07-2010, 10:09 Moin Leudde ;)
Ein für einem für Euch vielleicht ein eher kleineres Problem...
Ich hate in meiner DB ein Datum im Format: 01.07.2010 - 05:47:39
abgespeichert. Nun gehe ich davon aus, dass ich mit "CURDATE()" die Einträge suchen/ausgeben kann, die exakt 1 Monat zurück liegen.
Habe shon viel probiert/gesucht mit MONTH oder -30 DAYS aber leider nichts gefunden...
Bitte um Hilfe ;)
LG :D
streuner 01-07-2010, 10:29 Hi.
Wie wäre es mit PHP: strtotime - Manual (http://de.php.net/manual/de/function.strtotime.php) ?
streuner
infeloba 01-07-2010, 10:42 Damit habe ich den Timestamp.... Nützt mir aber nichts. Brauche die letzten 30 Tage aus einem Datum....
streuner 01-07-2010, 10:53 Ähm, weiter unten in dem Link findest einige gute Beispiele (du kannst strtotime doch mit beliebigen Befehlen, wie z.B. date(), koppeln).
streuner
infeloba 01-07-2010, 10:54 Habe das jetzt mit einer Datums-Umwandlung und anschließend mit:
WHERE DATE_ADD(datum,INTERVAL 1 MONTH)<=NOW()
gelöst, viel einfacher ;)
Gruß und Danke trotzdem !
streuner 01-07-2010, 10:56 ach...jetzt sehe ich auch gerade, dass Du in deinem ersten Beitrag geschrieben hast "Datenbank" - völlig überlesen und gewundert wegen Curdate();)!
Brauche erstmal nen Kaffee;)
streuner
infeloba 01-07-2010, 11:04 Den Kaff mach ich mir jetzt auch, weil er mir die Ergebnisse nicht richtig sortiert... :(
Hier die Abfrage:
$sql2 = mysql_query("SELECT nickname,aktiv,gesperrt,letzterlogin FROM user
WHERE aktiv = '1' AND gesperrt = '0' AND DATE_ADD(datum_10,INTERVAL 1 MONTH)<=NOW()
OR DATE_ADD(datum_20,INTERVAL 1 MONTH)<=NOW() OR DATE_ADD(datum_50,INTERVAL 1 MONTH)<=NOW()
OR DATE_ADD(datum_80,INTERVAL 1 MONTH)<=NOW() OR DATE_ADD(datum_100,INTERVAL 1 MONTH)<=NOW()
OR DATE_ADD(datum_120,INTERVAL 1 MONTH)<=NOW() OR DATE_ADD(datum_150,INTERVAL 1 MONTH)<=NOW()
OR DATE_ADD(datum_180,INTERVAL 1 MONTH)<=NOW() OR DATE_ADD(datum_200,INTERVAL 1 MONTH)<=NOW()
ORDER BY letzterlogin DESC LIMIT 15");
streuner 01-07-2010, 11:07 Wieso, wie gibt er Sie Dir aus und wie willst Du es haben?
streuner
Sortieren musst du dann wohl ebenso mit einer Datums-Umwandlung.
infeloba 01-07-2010, 11:16 Wieso, wie gibt er Sie Dir aus und wie willst Du es haben?
streuner
Also ich möchte diejenigen ausgeben, die zuletzt gespielt bzw. eingeloggt waren.
Wenn jemand eingeloggt war, wird ein Datum gespeichert im Format: 01.07.2010 - 05:47:39
Wenn jemand eingeloggt war, wird ein Datum gespeichert im Format: 01.07.2010 - 05:47:39
Dann wird es im falschen Format gespeichert. Bei MySQL gibt es genau dafür den DATETIME-Typ. Dann wird auch jede Abfrage und Sortierung zum Kinderspiel (und es ist auch deutlich schneller).
infeloba 01-07-2010, 11:24 Dann wird es im falschen Format gespeichert. Bei MySQL gibt es genau dafür den DATETIME-Typ. Dann wird auch jede Abfrage und Sortierung zum Kinderspiel (und es ist auch deutlich schneller).
Ok, habe jetzt das Format auf Datetime geändert, wie speichere ich denn am besten in die DB ab? Mit time() oder date() ?
infeloba 01-07-2010, 11:28 Speichern funktioniert :) Und wie frage ich jetzt die letzten 30 Tage ab?
SELECT nickname,aktiv,gesperrt,letzterlogin
FROM user
WHERE aktiv = '1' AND gesperrt = '0' AND DATE_ADD(letzterlogin,INTERVAL 1 MONTH)<=NOW()
ORDER BY DAY(letzterlogin)-30 DESC LIMIT 15
geht irgendwie nicht
infeloba 01-07-2010, 11:41 Eine letzte nervige Frage habe ich noch ;)
Funktioniert das so, dass ich die letzten Logins bekomme
SELECT nickname,aktiv,gesperrt,letzterlogin
FROM user
WHERE aktiv = '1' AND gesperrt = '0'
ORDER BY letzterlogin DESC LIMIT 15");
Gruß und Danke!
|
-
- |