"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

MySQL kopfweh ...

herky 18.08.2010 - 13:41 1016 6
Posts

herky

natürlicher fressfeind
Avatar
Registered: Feb 2001
Location: im tiefen loch
Posts: 910
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.

Code: PHP
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
Avatar
Registered: Nov 2005
Location: NÖ
Posts: 5221
Code: PHP
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
Avatar
Registered: Feb 2002
Location: Wien
Posts: 4281
Kleinigekit in der Fragestellung überlesen.
Bearbeitet von kleinerChemiker am 18.08.2010, 16:13

tinker

SQUEAK
Avatar
Registered: Nov 2005
Location: NÖ
Posts: 5221
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... :o :)

herky

natürlicher fressfeind
Avatar
Registered: Feb 2001
Location: im tiefen loch
Posts: 910
... leider geht das in mysql irgendwie nicht so recht mit verschachtelten abfragen - daher ja auch mein kopfweh ...

Zitat
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
Avatar
Registered: Nov 2005
Location: NÖ
Posts: 5221
hm, dann probier mal
Code: PHP
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
Avatar
Registered: Feb 2001
Location: im tiefen loch
Posts: 910
haha!!!

gelöst ist es - geht doch, nur muss man der temporären tabelle einen namen geben also demnach einfach:

Code: PHP
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
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz