Sorter pr. land og tæl besøg (statistik)

Tags:    php mysql statistik

Hey Udviklere.

Jeg har et statistik system, min tabel ser således ud:

id
ip
dato (sidste bevægelse af IP - time())
url (sidens url - fuld)
status (online/offline)
hits (sidevisninger af IP)
location (ip adressen land)

Jeg ville gerne lave en lille liste som viser hvor der kommer flest besøg fra. Noget lignende dette:

Danmark 582
Sverige 429
Norge 221

(eller eventuelt lave det i %? Har dog ingen anelse om hvordan dette kunne gøres. Kan det laves nemt, så sig til - er ikke haj til matematik desværre).

Jeg har forsøgt mig frem med denne kode:

Fold kodeboks ind/udPHP kode 


Men den virker ikke optimalt. Den outputter:

Besøg fra lande
Unknown
Denmark

Den skriver altså ikke hvor mange besøg der har været fra landet. Unknown = ukendt lokalition (ikke tag jer af dette).

Min SQL kommando er nok ikke rigtig, men spørgsmålet er hvordan man så skulle skrive den.

På forhånd tak.




6 svar postet i denne tråd vises herunder
1 indlæg har modtaget i alt 1 karma
Sorter efter stemmer Sorter efter dato
1:
Der er i PHP forskel på $cv og $cV.
$cV['antal'] ikke $cv[antal]

2:
Når du indekserer et array med strenge skal du huske at skrive '' eller "" om indekset. At glemme det gør PHP langsommere og indføre også en risiko for senere fejl.

3:
I tilfælde af at location er en streng bør du nok ændre din løsning til to tabeller:

lande
lid
navn

besøgende
id
ip
dato (sidste bevægelse af IP - time())
url (sidens url - fuld)
status (online/offline)
hits (sidevisninger af IP)
lid

4:
At have et id på den besøgende tabel virker en smule meningsløst IP'er er vel i sagens natur unikke i en unik besøgende tabel.

5:
Du bør ikke kode logik og visualisering sammen.
- At hente hvor mange besøgende hvert land har er logik.
- At vise, hvor mange besøgende hvert land har er visualisering.

6:
Procent er let nok, (Viser det i modstrid med 5):
Fold kodeboks ind/udKode 





1: Skarpt set - det havde jeg ikke bemærket.

2: Ja det plejer jeg faktisk også - havde bare ikke lige spottet den der. Tak for det!!

3: Forstår ikke meningen med dette - synes det virker perfekt nu. Uddyb evt.

4: Ja - godt set - ved heller ikke hvorfor jeg har tilføjet id til tabellen. Meget af systemet blev udviklet da jeg var knap så erfaren.

5: Hvad mener du? Uddyb evt.

6: Fed tak - så virker det sgu også med procent.

Tusind tak for dit svar - det løste mine problemer! :pirat:



3:
Er mest af alt teknisk:

Du har:
Fold kodeboks ind/udKode 


Jeg forslog:
Fold kodeboks ind/udKode 


Hvis du antager, at hvert bogstav du gemmer, optager ét byte. Vil du i din tabel have brugt væsentlig flere bytes end mit forslag.


5:
Hvis du har logik og visualisering separat kun du ændre dem uafhængigt af hinanden. I tilfælde af dig er det mest at du kan ændre visualisering.

Hvis f.eks. du havde din logik i fil som enten funktioner eller en klasse.

Kan du bare include den, forstil dig at lav noget i retning af dette når logik og visualisering er bladet sammen:

logic.php:
Fold kodeboks ind/udKode 


visuelt_txt.php:
Fold kodeboks ind/udKode 


visuelt_html.php:
Fold kodeboks ind/udKode 


visuelt_xml.php:
Fold kodeboks ind/udKode 




Ja okay - det giver mening.

Men jeg har et lille spørgsmål i samme dur.

Min cms_sider ser således ud:

id
navn (ex. Forside)
hits (ex: 28)
sprog (ex: Da)

Jeg vil gerne have oprettet en "graf" som viser det mest besøgte sprog. Dvs. plusser alle hits sammen og gruppere pr. sprog og så viser:

Da 387
En 100

Hvis altså Forside havde 300 hits og Kontakt os havde 87. Og Frontpage have 50 hits samt Contact us havde 50.

Jeg har prøvet mig frem med denne kode:

Fold kodeboks ind/udPHP kode 


Men det virker ikke. Den outputter:
Da: 8
En: 2

Selvom min side: "Forside" på Da har 97 ud af 97 hits. Inge engelske sider har nogen hits.

Hvad er der galt?



du skal bruge SUM ikke COUNT:

COUNT tæller antallet af rækker
SUM summere værdierne i kolonnen hits



Tak for det Jens - you're the man.



t