webForumDet fria alternativet

Mera problem med statistiken

12 svar · 286 visningar · startad av SprayMaphia

SprayMaphiaMedlem sedan jan. 2004128 inlägg
#1

Sådär ja, mer problem :P

Jag har en tabell som heter "tid" och är av datatypen "time". Jag har en for-sats (i = 0 To 23) och vill mha den skapa ett recordset för varje varv i loopen och räkna hur många records det finns där "Hour(tid)" är större än i men mindre än i+1.

Hur kan jag göra?

Tacksam för svar.

LarsGMedlem sedan dec. 200012 464 inlägg
#2

Skapa en tabell (tally) med en kolumn av typen integer och gör insert på värdena 1 till 24

select v, count(tid.tid)
from tally left join tid
on v = hour(tid)
group by v

där "Hour(tid)" är större än i men mindre än i+1

Det finns inga heltal som uppfyller det villkoret.

UlfTMedlem sedan maj 20018 027 inlägg
#3

LarsG skrev:

där "Hour(tid)" är större än i men mindre än i+1

Det finns inga heltal som uppfyller det villkoret.

Frågan är väl om det är möjligt att ställa villkoret: i < minutes(tid) < ( i + 60 )
Det borde i så fall lösa problemet. :)

SprayMaphiaMedlem sedan jan. 2004128 inlägg
#4

LarsG skrev:

Det finns inga heltal som uppfyller det villkoret.

Oj, det tänkte jag inte på :D

Men att skapa en till tabell just nu är otänkbart tyvärr...
Tänk mig dock en lösning likt denna, kan det funkar?

SELECT Count(tid) AS antal, Hour(tid) AS tid FROM statsGROUP BY Hour(tid) HAVING Hour(tid) = " & i
LarsGMedlem sedan dec. 200012 464 inlägg
#5
SELECT Count(tid) AS antal, Hour(tid) AS tid 
FROM stats 
GROUP BY Hour(tid)

i så fall. Nackdelen med denna (jämfört med mitt förslag) är att du inte får något resultat för de timmar där det inte finns några poster. Det kan man ju hantera i applikationen.

SprayMaphiaMedlem sedan jan. 2004128 inlägg
#6

LarsG skrev:

Nackdelen med denna (jämfört med mitt förslag) är att du inte får något resultat för de timmar där det inte finns några poster.

Det har jag redan tänkt på ;)

SprayMaphiaMedlem sedan jan. 2004128 inlägg
#7

LarsG skrev:

SELECT Count(tid) AS antal, Hour(tid) AS tid 
FROM stats 
GROUP BY Hour(tid)

På den SQL'en får jag 25 på alla :S

SprayMaphiaMedlem sedan jan. 2004128 inlägg
#8

Det här var ju dumt alltså :D

Här är lösningen:

SELECT Count(tid) AS antal FROM stats WHERE Hour(tid) = " & i
LarsGMedlem sedan dec. 200012 464 inlägg
#9

Det där är ingen bra lösning då du kommer att exekvera 24 frågor istället för en. Dessutom måste databashanteraren läsa alla poster i tabellen vid varje fråga.

SprayMaphiaMedlem sedan jan. 2004128 inlägg
#10

Herregud, jag har redan omkring 100 frågor så vad spelar 23 extra för roll? Dessutom exekveras sidan på under 0.3 sekunder ändå, så det gör inte så mycket imo. :P

Jesper TMedlem sedan nov. 20017 144 inlägg
#11

Ja visst, har man ingen som helst ambition att:

- ha fler samtidiga besökare på siten
- lära sig det som är rätt
- lära sig mer
- skriva effektivare kod
- lära sig att optimera sin SQL
- vara tacksam för hjälp på WF

Så kan man göra så. ;)

SprayMaphiaMedlem sedan jan. 2004128 inlägg
#12

Flera samtidiga besökare? Inte för att låta spydig med sidan har stått pall för > 40 besökare på samma gång. Det tycker jag är duktigt av en 2,8-ghz'are med 512mb ram och Windows XP :P

Dessutom är jag visst tacksam för all hjälp. Tack tack! :)

PoffeMedlem sedan apr. 20022 743 inlägg
#13

SprayMaphia skrev:

Flera samtidiga besökare? Inte för att låta spydig med sidan har stått pall för > 40 besökare på samma gång. Det tycker jag är duktigt av en 2,8-ghz'are med 512mb ram och Windows XP :P

Dessutom är jag visst tacksam för all hjälp. Tack tack! :)

Nej det gör den inte för IIS 5.1 som fäljer med XP kan inte hantera så många. Det finns en gräns på 10 aktiva besökare per gång inbyggd. Så jag har lite svårt att tro på vad du säger faktiskt. XP är ingen server plattform, vill du ha fler samtida besökare så ska du anävnda någon av serverversionerna.

136 ms totalt · 3 externa anrop · v20260731065814-full.0e50b1ef
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)