MySQL kopfweh ...

Seite 1 von 1 - Forum: Coding Stuff auf overclockers.at

URL: https://www.overclockers.at/coding-stuff/mysql_kopfweh_218311/page_1 - zur Vollversion wechseln!


herky schrieb am 18.08.2010 um 13:41

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


tinker schrieb am 18.08.2010 um 14:16

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 schrieb am 18.08.2010 um 16:09

Kleinigekit in der Fragestellung überlesen.


tinker schrieb am 18.08.2010 um 16:15

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 schrieb am 19.08.2010 um 09:57

... 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 schrieb am 19.08.2010 um 10:02

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 schrieb am 19.08.2010 um 10:05

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*




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025