Hej! Går i tankarna att föra statistik över de artiklar jag har i databasen. Det som ska föras är antal unika besökare för varje artikel. Men hur löser jag detta på ett smart sätt? Ett sätt jag kommit fram till är att skapa två nya tabell, StatistikTemp och StatistikFast
StatistikTemp innehåller:
Datum – datum då posten adderades
ArtikelID – Tal, Relaterat ID nummer från tabellen Artikel
StatistikFast innehåller:
Datum – datum då posten adderades
ArtikelID – Tal, Relaterat ID nummer från tabellen Artikel
TotaltAntBesok – Tal, Antal besökare
När en artikel visas läggs en post med aktuellt artikelID till i tabellen StatistikTemp. Vidare finns en schemalagd fil som körs 00.01 varje natt som räknar ihop alla poster i StatestikTemp som har samma ArtikelID för att sedan lägga in det totala antalet besökare i tabellen StatistikFast. Därefter tas samtliga poster bort från tabellen StatistikTemp. När statistik efterfrågas tas aktuella poster fram från databasen StatistikFast och visas snyggt i ett diagram.
Men nu till problemet som jag ser det: Säg att databasen innehåller 1000 artiklar, varje dag blir det alltså 1000 nya poster i tabellen StatistikFast (förutsatt att varje artikel visats under dagen). Detta blir så mycket som 365 000 poster på ett år! Går det att göra på något bättre sätt?
Mannen, det "problem" som uppstår vid varje visning av artiklar är att man först måste kolla om det redan finns en post för aktuellt datum och sedan utifrån det lägga till eller uppdatera den befintliga. Tänkte att det kunde vara bra att slippa den där extra rundan i databasen.
Mannen, det "problem" som uppstår vid varje visning av artiklar är att man först måste kolla om det redan finns en post för aktuellt datum och sedan utifrån det lägga till eller uppdatera den befintliga. Tänkte att det kunde vara bra att slippa den där extra rundan i databasen.
En sql-fråga som kontrollerar om en post finns kan knappast räknas som en "extra runda". När du hämtar data som är flera megabyte stora eller kör 20 extra sql-frågor kan du börja prata om "extra rundor".
Dessutom behöver du inte göra några kontroller alls.
Om användaren vill läsa artikel nummer 25 så hämtar du ju den med en select, därefter uppdaterar du 'TotaltAntBesok' med 1. Varför göra det svårare än det är?
Hmm ja det ligger det någonting i. Men då blir min idée att i stället för TotaltAntBesok ha något i stilen med AntBesokIdag för att sedan lägga över dessa i en annan tabell varje natt.
Varför ska du lägga över någonting över huvud taget? Spara rätt data med en gång i stället. Jag menar alltså att du lägger 'TotaltAntBesok' i samma tabell som du har din artiklar.
Men det jag vill komma åt är att kunna vissa statistik för varje dag innom samtliga artiklar. Då räcker det inte med ett fält för totalt antal besökare. Hur ska jag då kunna veta att jag i onsdags hade 100 visningar och 250 på torsdagen då jag bara sparar totalt anal visningar?
Det blir såklart fler poster, men du har större valmöjlighet att ställa specifika frågor i efterhand. Flytta dock inte över det till någon fast tabell, utan låt det vara om det är.
Ja ok. Men det blir ju otroligt massa data efter bara några månader, känns nästan lite slösaktigt, men du har helt klart en poäng.
En till jag tänkte på är vad som räknas som unik besökare, finns det något standardvärde? Räknas man som unik 24 timmar efter senaste besöket?
Underbart med länken! Fast då måste man med andra ord också spara IP nummren i förslagsvis samma tabell som besökslistan. Men varför inte använda en kaka för att spara när och var? Det kan ju finnas massar av användare bakom ett IP samt att många får nytt IP nummer när dom kopplar av och på modemet. Iof går det att stänga av en kaka också...
Jovisst får du spara mer information i tabellen, jag bara drog de mest nödvändiga kolumnerna. Förslagsvis bör du spara IP-nummer och user agent. Kanske sessionens ID-nummer också.
Fördelen med att du sparar all information och bevarar den intakt är att du kan göra sökningar på många olika sätt. Om du efter ett år kommer på ett bättre sätt att räkna ut unika besökare kan du göra det - du har ju all originaldata kvar! Du kan filtrera besökare efter unik ip/dag, unik ip/session, enbart session m.m. Det mittersta alternativet skulle jag nog satsa på, eftersom sessionen sköts automatiskt och är mest korrekt.
254 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849