MySQL kopfweh ...
herky 18.08.2010 - 13:41 1019 6
herky
natürlicher fressfeind
|
ich versuche aus einer log datenbank (protokolliert werden zugriffe auf mehrere seiten in eine datenbank) die anzahl der benutzer pro tag jedoch im endeffekt summiert zu bekommen. SELECT from_days(to_days(date)) AS Datum, COUNT(distinct ip) AS Besucher
FROM db
WHERE ( to_days( date ) - 1 ) < ( to_days( now( ) ) - 0)
AND ( to_days( date ) ) > ( to_days( now( ) ) - 7)
AND directory = "website1"
GROUP BY Datum
ORDER BY Datum DESC LIMIT 0, 300
mein problem ist dass ich jedoch eigentlich nicht die werte pro tag brauche sondern einfach eine summe (die ja dann von der gesamtsumme abweicht weil an jedem tag aufs neue geschaut wird ob die ip schon mal da war oder nicht) -> wiederbesucheswerte ich kann das ganze natürlich per php dann zusammenzählen lassen. das ist aber bei 20 Webseiten ein richtiger pain wenn man dann richtig viele datensätze über ein jahr zusammen sammelt ^^ hat wer von euch eine idee wie ich die zweite spalte (COUNT(distinct ip) AS Besucher) zusammenzählen lassen könnte? es soll dann statt der tabele die ich dadurch bekomme: | 2010-08-18 | 405 | | 2010-08-17 | 854 | | 2010-08-16 | 767 | | 2010-08-15 | 113 | | 2010-08-14 | 745 | | 2010-08-13 | 746 | | 2010-08-12 | 624 | eigentlich zB für 18 bis 12: 4254 da stehen. greets herky
Bearbeitet von herky am 19.08.2010, 11:00
|
tinker
SQUEAK
|
SELECT sum(Besucher)
FROM (SELECT COUNT(distinct ip) AS Besucher
FROM db
WHERE ( to_days( date ) - 1 ) < ( to_days( now( ) ) - 0)
AND ( to_days( date ) ) > ( to_days( now( ) ) - 7)
AND directory = "website1"
GROUP BY date)
Sollte passen, außer mysql hat da irgendwelche Eigenheiten.
|
kleinerChemiker
Here to stay
|
Kleinigekit in der Fragestellung überlesen.
Bearbeitet von kleinerChemiker am 18.08.2010, 16:13
|
tinker
SQUEAK
|
Jo klar. Aber so hat er die insgesamt eindeutigen User in dem Zeitraum. Er will aber, soweit ichs versteh, die Summe an pro Tag eindeutigen Usern haben. Sprich wenn ich die Seite heut und morgen ansurfe stehe ich zweimal in der Gesamtsumme. Bei deiner Variante einmal. (gesetz dem Fall ich beide male die selbe IP) Sprich bei meiner Variante sind die Wiederbesucher auch dabei, und die will er glaub ich ja auch dabei haben. // meh...
|
herky
natürlicher fressfeind
|
... leider geht das in mysql irgendwie nicht so recht mit verschachtelten abfragen - daher ja auch mein kopfweh ... MySQL said: Documentation #1248 - Every derived table must have its own alias was auch immer das heißt thx trotzdem für die hilfe
|
tinker
SQUEAK
|
hm, dann probier mal SELECT sum(v.Besucher)
FROM (SELECT COUNT(distinct ip) AS Besucher
FROM db
WHERE ( to_days( date ) - 1 ) < ( to_days( now( ) ) - 0)
AND ( to_days( date ) ) > ( to_days( now( ) ) - 7)
AND directory = "website1"
GROUP BY date) AS v
|
herky
natürlicher fressfeind
|
haha!!! gelöst ist es - geht doch, nur muss man der temporären tabelle einen namen geben also demnach einfach: SELECT sum(Besucher)
FROM (SELECT COUNT(distinct ip) AS Besucher
FROM db
WHERE ( to_days( date ) - 1 ) < ( to_days( now( ) ) - 0)
AND ( to_days( date ) ) > ( to_days( now( ) ) - 7)
AND directory = "website1"
GROUP BY date) AS temp_table
thx tinker!! //edit - wie oben, jedoch mit group by to_days( date ) damit er auch wirklich nur per tag zusammenzählt und nicht pro sekunde *gg*
Bearbeitet von herky am 19.08.2010, 10:08
|