ERLEDIGT
JA
JA
ANTWORTEN
6
6
ZUGRIFFE
242
242
EMPFEHLEN
-
Hallo,
es ist schon ziemlich spät - ich weiß. Vielleicht liegt es auch daran das ich zu keiner Lösung komme. Aktuell werden bei mir für bestimmte Datensätze Klicks gezählt, mir einer Reloadsperre via IP. Das klappt auch super. Diese Klicks zeigen aber logischerweise nur die Gesamtklicks an (daraus kann man dann einfach eine Top 25 bauen). Wie kann ich es via SQL und PHP aber realisieren, dass ich für bestimmte Datensätze die Klicks vom aktuellen Tag, Monat und Jahr bekomme. Wie kann ich das machen? Irgendwie bekomme ich da in meinem Gehirn keine logische Lösung zustande.
Vielen Dank für eure Hilfe.Geändert von PHP-Fan (09.02.12 um 03:13 Uhr)
-
Wie sind die Klicks gespeichert? Eine SQL-Tabelle wo jeder Klick mit Zuordnungs-ID und Zeitstempfel drin steht?
Wenn ja, dann kannst du mit DATE_SUB arbeiten. Dann mit IF() den Wert 1 oder 0 ausgeben und diese aufsumieren
Code sql:1 2 3 4 5 6 7 8 9
SELECT site_id, SUM(IF(`my_timestamp_field` >= DATE_SUB(NOW(), INTERVAL 1 DAY), 1, 0)) AS in_day, SUM(IF(`my_timestamp_field` >= DATE_SUB(NOW(), INTERVAL 1 MONTH), 1, 0)) AS in_month, SUM(IF(`my_timestamp_field` >= DATE_SUB(NOW(), INTERVAL 1 YEAR), 1, 0)) AS in_year FROM my_klick_table GROUP BY site_id
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Ja genau. Das ist der Ansatz den ich gebraucht habe. Wie sieht das Performancetechnisch aus? Wobei man das ja auch auslagern und alle X Stunden aktualisieren kann.
Vielen Dank!
-
Du meinst mit auslagern dieses Resultat in eine weitere Tabelle schreiben? Ja, kannst einen Cronjob machen. Aber bringt es was? Wieviel mal wird auf diese Statistik zugegriffen?
Was du sicher mal noch kannst, sind die Daten auf ein Jahr eingrenzen.
Code sql:1 2 3 4 5 6 7 8 9 10 11
SELECT site_id, SUM(IF(`my_timestamp_field` >= DATE_SUB(NOW(), INTERVAL 1 DAY), 1, 0)) AS in_day, SUM(IF(`my_timestamp_field` >= DATE_SUB(NOW(), INTERVAL 1 MONTH), 1, 0)) AS in_month, SUM(IF(`my_timestamp_field` >= DATE_SUB(NOW(), INTERVAL 1 YEAR), 1, 0)) AS in_year FROM my_klick_table WHERE `my_timestamp_field` >= DATE_SUB(NOW(), INTERVAL 1 YEAR GROUP BY site_id
Ein Index aif die site_id und dein Timestamp-Feld kann sicher auch nicht schaden.---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Wenn es um mehrere Tausend Datensätze geht, die von mehreren Tausend Besuchern täglich aufgerufen werden, wäre es sinnvoll so eine Tabelle auszulagern, damit diese nicht immer neu berechnet wird. Je nachdem wieviel Datensätze es wirklich werden könnte die oben genannte Anfrage langsam werden. Du hast mir aber den richtigen Ansatz gezeigt, damit komme ich weiter.
Einen Index werde ich auf die beiden Felder natürlich setzen.
Vielen Dank!
-
Mittels eines Cronjobs ein Script ausführen lassen.
Code sql:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
-- Alte Daten löschen TRANCATE myTempTable; -- Daten neu einfügen INSERT INTO myTempTable (site_id, in_day, in_month, in_year) SELECT site_id, SUM(IF(`my_timestamp_field` >= DATE_SUB(NOW(), INTERVAL 1 DAY), 1, 0)) AS in_day, SUM(IF(`my_timestamp_field` >= DATE_SUB(NOW(), INTERVAL 1 MONTH), 1, 0)) AS in_month, SUM(IF(`my_timestamp_field` >= DATE_SUB(NOW(), INTERVAL 1 YEAR), 1, 0)) AS in_year FROM my_klick_table WHERE `my_timestamp_field` >= DATE_SUB(NOW(), INTERVAL 1 YEAR GROUP BY site_id;
---------------------------------------------------------------------------------------------------
item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
item: Tutorial: [PHP][MySQL] Debug Queries
item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben
-
Herzlichen Dank!
Ähnliche Themen
-
Gruppieren nach Jahr und Monat, angezeigt werden soll der 1.Tag im Monat um 00:00
Von charlie2009 im Forum Relationale DatenbanksystemeAntworten: 6Letzter Beitrag: 15.09.09, 19:22 -
Automatisch den aktuellen Tag+Monat+Jahr in Dropdown Feld einlesen
Von zigosch im Forum PHPAntworten: 7Letzter Beitrag: 24.10.07, 22:29 -
Automatisch den aktuellen Tag+Monat+Jahr in Dropdown Feld einlesen
Von zigosch im Forum HTML & XHTMLAntworten: 0Letzter Beitrag: 24.10.07, 15:06 -
In VBA für ACCESS: Vom aktuellen Datum das Monat bzw. das Jahr auslesen
Von rene2407 im Forum Office-AnwendungenAntworten: 13Letzter Beitrag: 23.10.07, 19:43 -
Eingabefeld für Jahr, Monat/Jahr, Tag/Monat/Jahr
Von acky im Forum JavaAntworten: 0Letzter Beitrag: 24.07.05, 16:28





Zitieren

Login






[PHP][Snippet] Array zu XML konvertieren