Avatar billede Slettet bruger
04. august 2005 - 10:24 Der 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æ.

Der har været besøgende de andre dage.
Avatar billede Slettet bruger
04. august 2005 - 10:28 #1
Hvordan ser dine felter i databaen ud? type, indhold?
Avatar billede arne_v Ekspert
04. august 2005 - 10:31 #2
GROUP BY DAY(Dato)

betyder vel at du vil have optalt på dag delen => 1. juli = 1. augist

??
Avatar billede arne_v Ekspert
04. august 2005 - 10:33 #3
er det måske:

SELECT MONTH(dato),DAY(Dato), COUNT(*) AS Antal FROM UserInfo GROUP BY MONTH(dato),DAY(Dato)

du vil ?
Avatar billede 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)
Avatar billede 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.
Avatar billede 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;
                   
                    MySqlDataReader reader = command.ExecuteReader();
                    while(reader.Read())
                    {
                        dato.Add(reader.GetDateTime(0).ToLongDateString());
                        antal.Add(reader.GetInt32(1).ToString());
                    }
                    reader.Close();

Er det ikke omtrent det samme der trækkes ud?
Fejlen sker der hvor output fra query vha. af reader lægges ind i et array.
Avatar billede arne_v Ekspert
04. august 2005 - 11:03 #7
Du skal vel hente:

reader.GetInt32(0)
reader.GetInt32(1)
reader.GetInt32(2)

med min SQL
Avatar billede Slettet bruger
04. august 2005 - 11:14 #8
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?
Avatar billede 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 :-)
Avatar billede arne_v Ekspert
04. august 2005 - 11:18 #10
Man kan meget.

:-)

Hvis dato feltet var af type DATE, så bur4de det slet ikke vær enødvendigt at kalde
nogen funktioner på det.

Hvis du fortsætter med de her funktioner, så skal du nok også have YEAR med
ellers får du problemer om et år.

Du kan godt samle i SQL ved at lave en formatering af dato feltet fremfor de funktioner.

Men grundliggende forstår jeg stadig ikke hvad du vil.
Avatar billede arne_v Ekspert
04. august 2005 - 11:20 #11
SELECT DATE_FORMAT(dato,'%Y %m %d'),COUNT(*)
FROM UserInfo
GROUP BY DATE_FORMAT(dato,'%Y %m %d')
Avatar billede 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
Avatar billede 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.
Avatar billede 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

Og listen som den ser ud nu:

4. august 2005 3

3. august 2005 2

2. august 2005 1

30. juli 2005 1

29. juli 2005 1

28. juli 2005 1

26. juli 2005 3

25. juli 2005 2

23. juli 2005 1

22. juli 2005 1

21. juli 2005 1

20. juli 2005 2

19. juli 2005 1

18. juli 2005 3

16. juli 2005 1

13. juli 2005 2

12. juli 2005 1

11. juli 2005 2

9. juli 2005 2

6. juli 2005 1

5. juli 2005 1

4. juli 2005 1

3. juli 2005 3

1. juli 2005 1

30. juni 2005 2

29. juni 2005 1

28. juni 2005 1

27. juni 2005 1

26. juni 2005 2

25. juni 2005 3

23. juni 2005 1

22. juni 2005 1

21. juni 2005 1

20. juni 2005 1

19. juni 2005 2

18. juni 2005 1

17. juni 2005 2

16. juni 2005 3

15. juni 2005 3

14. juni 2005 2

13. juni 2005 3

12. juni 2005 6

11. juni 2005 1

10. juni 2005 4

9. juni 2005 2

7. juni 2005 2

6. juni 2005 3

5. juni 2005 1

4. juni 2005 5

3. juni 2005 1

2. juni 2005 3

1. juni 2005 2

31. maj 2005 2

30. maj 2005 2

29. maj 2005 1

25. maj 2005 3

24. maj 2005 2

23. maj 2005 1

22. maj 2005 1

21. maj 2005 1

20. maj 2005 2

17. maj 2005 3

16. maj 2005 3

15. maj 2005 1

14. maj 2005 1

11. maj 2005 1

10. maj 2005 1

9. maj 2005 1

8. maj 2005 2

7. maj 2005 2

6. maj 2005 1

5. maj 2005 5

4. maj 2005 12

3. maj 2005 1

1. maj 2005 5

30. april 2005 1

29. april 2005 2

28. april 2005 1

27. april 2005 1

26. april 2005 2

25. april 2005 3

24. april 2005 1

23. april 2005 1

21. april 2005 2

20. april 2005 1

19. april 2005 4

17. april 2005 1

16. april 2005 2

15. april 2005 10

14. april 2005 14

13. april 2005 8

12. april 2005 22

Lægger du lige et svar?
Avatar billede arne_v Ekspert
04. august 2005 - 18:44 #15
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester