04. august 2005 - 10:24Der er
14 kommentarer og 1 løsning
Problemer med query
Hejsa,
Jeg har lavet et simpelt statistik-system, der optæller antal besøg vha. sessionOnstart og sørger for at der ikke bliver logget mere end ´en gang indenfor 20 minutter. Besøg logges i en MySql database. Virker vidst meget godt, men det ser ud som om der er et problem. Problemet er at hits tilsyneladende bliver logget i databasen, men at de bliver vist på eksisterende dage i oversigten - altså, oversigten viser måske 30 dage og antallet for hver given dag ud for datoen, men når nye hits kommer til bliver de talt op under samlet antal hits, men tilføjet til eksisterende dage.
Problemet er altså kort, at nye dage ikke kommer med i oversigten.
Jeg benytter følgende sql-forespørgsel til at trække antal hits ud for hver dag.
SELECT Dato, COUNT(DAY(Dato)) AS AntalDage FROM UserInfo GROUP BY DAY(Dato) ORDER BY Dato DESC
Det så ud til at virke det første stykke tid - altså ny dage hvor der var besøgende på hjemmesiden blev vist i oversigten, men efter en 30 dages tid kom der altså ingen nye dage på, andet end én i ny og næ.
SELECT MONTH(dato),DAY(Dato), COUNT(*) AS Antal FROM UserInfo GROUP BY MONTH(dato),DAY(Dato)
du vil ?
Synes godt om
Slettet bruger
04. august 2005 - 10:34#4
Jeg har følgende felter i den tabel.
- Id - Int(11) - Dato TimeStamp (sættes ind som en streng i salve tabellen) - Ip Varchar(16) - Referrer Varchar(255) - Browser Varchar(35) - Platform Varchar(35) - Sprog Varchar(5)
Synes godt om
Slettet bruger
04. august 2005 - 10:36#5
ArneV. Jeg vil gerne have grupperet alle poster indenfor den samme dag og dato. Ikke 1. juli = 1. august. Men det er måske det der i virkeligheden er problemet. Som sagt vises der omkring én måned, hvor antallet så stiger ud for den enkelte dag - bare mærkeligt at nogle dage har langt flere besøg end andre når der ikke er de store udsving i antallet af besøgende.
Jeg prøver lige den du skrev.
Synes godt om
Slettet bruger
04. august 2005 - 10:50#6
Jeg har prøvet den query du skrev ArneV, men nu fejler programmet i stedet.
command.CommandText = "SELECT MONTH(Dato),DAY(Dato), COUNT(*) AS AntalDage FROM UserInfo GROUP BY MONTH(dato),DAY(Dato) ORDER BY Dato DESC"; //command.CommandText = "SELECT Dato, COUNT(DAY(Dato)) AS AntalDage FROM UserInfo GROUP BY DAY(Dato) ORDER BY Dato DESC"; command.Connection = connection;
Ok. Tak for din hjælp. Måske et ret banalt spørgsmål, men hvad er det præcis jeg får ud af den query. Jeg får 3 værdier ud, den er jeg med på, men er det 2 værdier i datoformat (måned og dag) og én værdi i form af et tal?
Og kan den laves sådan at man stadig får kun 2 værdier ud - altså sådan at måned og dag samles som det var tiltænkt i den gamle query, men som tilsyneladende ikke virkede efter hensigten?
Synes godt om
Slettet bruger
04. august 2005 - 11:18#9
Jeg tænker på noget i retning af:
SELECT MONTH(Dato),DAY(Dato) AS DatoSamlet
eller noget i den dur. Jeg kan ikke umiddelbart få det til at virke, men jeg er så bestemt heller ikke nogen sql-haj :-)
SELECT DATE_FORMAT(dato,'%Y %m %d'),COUNT(*) FROM UserInfo GROUP BY DATE_FORMAT(dato,'%Y %m %d')
Synes godt om
Slettet bruger
04. august 2005 - 11:22#12
Jamen det med året skal da klart være med. Ellers er der jo ikke nogen statistik næste år som du siger :-)
Det jeg vil er, at vise hvor mange der har besøgt siden en given dag:
Dato Besøg
11. maj 2005 4 10. maj 2005 5 9. maj 2005 5 8. maj 2005 2 7. maj 2005 4 6. maj 2005 5 5. maj 2005 7 4. maj 2005 21 3. maj 2005 7 1. maj 2005 8 30. april 2005 6 29. april 2005 5 28. april 2005 3 27. april 2005 2 26. april 2005 7 25. april 2005 11 24. april 2005 3 23. april 2005 4 21. april 2005 5 20. april 2005 6 19. april 2005 7 17. april 2005 6 16. april 2005 9 15. april 2005 14 14. april 2005 17 13. april 2005 13 12. april 2005 29
Synes godt om
Slettet bruger
04. august 2005 - 11:24#13
Tager lige den fulde liste.
18. juni 2005 4 2. juni 2005 4 31. maj 2005 2 22. maj 2005 3 11. maj 2005 4 10. maj 2005 5 9. maj 2005 5 8. maj 2005 2 7. maj 2005 4 6. maj 2005 5 5. maj 2005 7 4. maj 2005 21 3. maj 2005 7 1. maj 2005 8 30. april 2005 6 29. april 2005 5 28. april 2005 3 27. april 2005 2 26. april 2005 7 25. april 2005 11 24. april 2005 3 23. april 2005 4 21. april 2005 5 20. april 2005 6 19. april 2005 7 17. april 2005 6 16. april 2005 9 15. april 2005 14 14. april 2005 17 13. april 2005 13 12. april 2005 29
Som det ses her, har fek,s. 4. maj haft 21 besøg, hvilket slet ikke passer. Så vidt jeg husker var der 10-12 besøg den dag, men sidenhen er senere besøg åbenbart blevet trukket ud i denne datogruppe. De stpr dog korrekt i selve tabellen i databasen.
Synes godt om
Slettet bruger
04. august 2005 - 11:46#14
ArneV, You are the man! Jeg har fiflet lidt med din query og nu ser det ud til at virke. Har sammenlignet med datoerne i tabellen og output og det stemmer i hvert fald overens lige nu og her. Ved så ikke om det virker næste år - vil det gøre det?
SELECT DATE_FORMAT(Dato,'%Y %m %d') AS Dato, COUNT(Dato) FROM UserInfo AS AntalPerDag GROUP BY Dato ORDER BY Dato DESC
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.