WCM Forum

WCM Forum (http://www.wcm.at/forum/index.php)
-   Programmierung (http://www.wcm.at/forum/forumdisplay.php?f=17)
-   -   SQL-Query für Counter (http://www.wcm.at/forum/showthread.php?t=205149)

Potassium 07.12.2006 12:49

SQL-Query für Counter
 
Ich suche das SQL-Statement um die Anzahl an Einträgen von einem Tag zu bekommen.
Also der Tag an dem die meißten Benutzer online waren.
Tabelle:
Counter_ID (PK), Counter_Time, Counter_IP, Counter_Referer

ich denk das würde irgendwie mit SELECT MAX(Count_ID) WHERE und dann was mit BETWEEN aber wie genau weiß ich ned.
Counter_Time ist als Unixtimestamp angegeben.

pong 07.12.2006 12:53

select count(date (wo auch immer das Datum drinn sein mag)) as hits from was auch immer
group by date(wo auch immer das Datum drinn sein mag) order by hits;

pong

Potassium 07.12.2006 13:10

danke erstmal.
"wo auch immer das Datum drinn sein mag" ?
wie soll ich das verwirklichen?

pong 07.12.2006 18:07

Zitat:

wie soll ich das verwirklichen?
da bei dir die Daten schon zu bestehen scheinen, wirst du ja hoffentlich die Zeitpunkt der Counterauslösung in einem Datum+Zeit Format gespeichert haben von welchem du das Datum rauszuholen hast, schließlich wirst du ja kaum an einer Auswertung pro ms interessiert sein, oder?

pong

T.dot 08.12.2006 18:33

Keine Ahnung wie performant das ist, erste Lösung dir mir eingefallen ist:

Um zb. die Zugriffszahl für jeden Tag auszuwerten:
SELECT DATE_FORMAT( SpalteDatum, '%d.%m.%Y' ) , count( SpalteDatum )
FROM datumstabelle
GROUP BY DATE_FORMAT( SpalteDatum, '%d.%m.%Y' )
ORDER BY SpalteDatum

Wenn du für Stunde/Woche/Monat/Jahr/was-auch-immer auswerten willst, musst du den Pattern im Date_Format ändern, siehe hierzu:
http://dev.mysql.com/doc/refman/4.1/...functions.html

mfg T.

gorie 14.12.2006 11:38

Ich wäre für eine etwas kürzere Variante

"SELECT COUNT(*) c, SUBSTR(Counter_Time, 1,10) t ".
"FROM `tabelle` ".
"GROUP BY TO_DAYS(Counter_Time) ". "ORDER BY c ASC "

sofern Counter_Time als Datetime gespeichert ist, sonst bekommst für das substr nix richtiges

Potassium 14.12.2006 20:30

Das Datum ist als UNIX-Time stamp (int) gespeichert!

gorie 14.12.2006 22:51

Zitat:

Original geschrieben von Potassium
Das Datum ist als UNIX-Time stamp (int) gespeichert!
dann musst du einfach das SUBSTR(Counter_Time, 1,10) dementsprechend anpassen

klappt der Ausdruck ansonst?

iG0r 19.12.2006 14:14

habs mal kurz getestet, so klappt es mit unix timestamps:

PHP-Code:

$sql "SELECT COUNT(*) AS c FROM deine_tabelle GROUP BY DATE_SUB(FROM_UNIXTIME(dein_unix_timestamp,'%Y-%m-%d'),INTERVAL 1 DAY)"

zählt alle timestamps die am selben tag erstellt wurden, wie du es wolltest.

gorie 19.12.2006 14:45

Zitat:

Original geschrieben von iG0r
habs mal kurz getestet, so klappt es mit unix timestamps:

PHP-Code:

$sql "SELECT COUNT(*) AS c FROM deine_tabelle GROUP BY DATE_SUB(FROM_UNIXTIME(dein_unix_timestamp,'%Y-%m-%d'),INTERVAL 1 DAY)"

zählt alle timestamps die am selben tag erstellt wurden, wie du es wolltest.

tut das selbe wie mein ausruck... :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 22:32 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
© 2009 FSL Verlag