[PHP] Daten von x Tagen

TTlong

Angesehenes Mitglied
Hallo,

ich möchte für meine User eine kleine Statistik-Seite machen (kleiner Anzeigenmarkt) und Ihnen zeigen, wie oft ein User das entsprechende Inserat aufgerufen hat.

Ich habe eine neue Tabelle erstellt die unter anderem den Timestamp loggt.

Tabelle:

id
siteid
timestamp

Ich möchte nun dem Anzeigenschalter auf der Statistikseite sagen/zeigen:

Ihr Inserat wurde die gestern x mal aufgerufen
Ihr Inserat wurde die letzten x Tage x mal aufgerufen

Wie müsste mein SQL-Statement bzw. der PHP-Code aussehen?

QUOTE
"SELECT * FROM ht_detaillog WHERE id = '".$this->DB->escapeString($detailID)."' AND timestamp ??????";





Danke schonmal und Gruß

TTlong
 
Ich habe zwar keine Ahnung von dieser Timestamp-Logik.

Aber im Prinzip müßte man damit rechnen können - also Timestamp jetzt - irgendeine Zahl ergibt Timestamp vor genau einer Woche. Das kann man in die Where-Bedingung übernehmen.


Ansonsten: Statt der Timestamp-Spalte direkt eine Datum/Uhrzeit-Spalte nutzen.

Mit MS Sql wäre das dann sehr einfach:

QUOTE Where Datum >= DateAdd(dd, -1, getdate())



DateAdd zieht hier einen (= -1) Tag (nicht ein Jahr, dann würde yyyy notiert werden) vom aktuellen Datum/Uhrzeit ab.
Das wären dann die letzten 24 Stunden.

Analog könnte man konvertieren:


QUOTE Where Datum >= Cast(Cast(Cast(DateAdd(dd, -1, getdate()) as Decimal(18,4)) as int) as datetime)


Das transferiert Datum/Uhrzeit in eine Dezimalzahl (das kostet nichts, da das intern ohnehin als Dezimalzahl gespeichert wird), schneidet Nachkommastellen ab (Konvertierung Decimal -> Integer) und transferiert das wieder in ein Datum, ergibt also den gestrigen Tag, 00:00 und erfaßt damit alles seit diesem Zeitpunkt.
 
Ich hab des jetzt so gelöst, keine Ahnung obs vielleicht noch nen SQL-Befehl für die Berechnung gibt, aber es funktioniert soweit erstmal.

QUOTE "SELECT * FROM ht_detaillog WHERE siteid = '".$this->DB->escapeString($userID)."'
AND timestamp > '".strtotime("-3 days")."'
AND timestamp < '".strtotime("today")."' GROUP BY ip";
 
QUOTE (TTlong @ Mi 14.10.2009, 16:35) Ich hab des jetzt so gelöst, keine Ahnung obs vielleicht noch nen SQL-Befehl für die Berechnung gibt, aber es funktioniert soweit erstmal.


QUOTE "SELECT * FROM ht_detaillog WHERE siteid = '".$this->DB->escapeString($userID)."'
                                          AND timestamp > '".strtotime("-3 days")."'
                                          AND timestamp < '".strtotime("today")."' GROUP BY ip";


Das funktioniert soweit, jedoch musst Du bedenken, dass
strtotime("-3 days")
ohne weiteren Parameter 72 Stunden vom Zeitpunkt JETZT abzieht.

Wenn Du dem User also Zeiträume von 00:00 Uhr an beginnend anzeigen möchtest musst der query lauten:


QUOTE "SELECT * FROM ht_detaillog WHERE siteid = '".$this->DB->escapeString($userID)."'
AND timestamp > '".strtotime("-3 days", strtotime("today"))."'
AND timestamp < '".strtotime("today")."' GROUP BY ip";
 
Mit strtotime hatte ich nach einem Serverwechsel schlechte Erfahrungen gemacht und verwende jetzt nur noch mktime.
Wenn's hier funktioniert is ja gut.

Grüsse
 
Zurück
Oben