Avatar billede mccookie Seniormester
06. april 2005 - 23:14 Der er 31 kommentarer og
1 løsning

Lav et count på antallet af logs på en bestemt artikel i en nyhed

Hejsa

Jeg vil gerne lave en antal læste gange på mit artikelsystem.

Jeg har en overordnet idé om hvordan deet skal strikkes sammen, men det teoriske fundament er ikke helt tilstrækkeligt.

Jeg en har en log tabel med følgende felter:

news_logs_id (primær nøgle)
news_id (fremmednøgle)
ip (læseren ip)
tid (timestamp for hvornår artiklen er læst)

Jeg vil reelt af ovenstående blot have et tal ud af min forespørgelse.....som skal være noget i stil med...

Select count(news_logs_id) as antal from news_logs where
- IP ikke er lig med en IP, der har besøgt indenfor det sidste kvarter..

Håber det er til at forstå....
Avatar billede barklund Nybegynder
06. april 2005 - 23:20 #1
Hm, jeg forstår ikke helt - altså du vil ikke tælle dem, der har besøgt inden for det sidste kvarter?
Avatar billede mccookie Seniormester
07. april 2005 - 17:18 #2
Nej, det er hvis det samme IP nr. har besøgt artiklen med under et kvarters mellemrum skal det ikke tælles som et besøg
Avatar billede barklund Nybegynder
09. april 2005 - 17:40 #3
Det kan man ikke bare lige gøre - det vil være smartere at gøre på den anden side - altså hvor du sætter besøgene ind.

Altså "hvis jeg ikke har været her inden for det sidste kvarter, indsæt mit besøg", så kan du jo bare tælle alle besøgene direkte.

Det vil absolut være den smarteste metode.
Avatar billede mccookie Seniormester
11. april 2005 - 14:19 #4
er der virkelig ikke nogen muligheder??
Avatar billede barklund Nybegynder
11. april 2005 - 14:23 #5
Jeg kan ikke se det - og det andet er da en meget bedre løsning
Avatar billede barklund Nybegynder
11. april 2005 - 14:24 #6
Mjoo, og dog - man kan groupe på ip og kvarter - men det vil ikke være perfekt.
Avatar billede mccookie Seniormester
11. april 2005 - 14:26 #7
barklund>>

Du giver mig nogle ideer..... Det der med group er måske ikke helt tosset....

Mit problem er vel næsten at få det sorteret på tiden....
Avatar billede martin1000ben Nybegynder
11. april 2005 - 14:28 #8
SELECT * FROM tabel WHERE dato < DATE_ADD(NOW(), INTERVAL 15 MINUTE)

* ikke testet men noget i den stil :) *
Avatar billede barklund Nybegynder
11. april 2005 - 14:32 #9
martin1000ben, det er jo slet ikke issuet. Vi skal have valgt alle, der ikke er inden for et kvarter i forhold til hinanden - ikke indenfor et kvarter i forhold til nu.

mccookie, og det vil stadig ikke være perfekt, da man jo kan besøge artikler klokken 12.14 og igen klokken 12.16 - det er to forskellige kvarterer, men stadig indenfor 15 minutter af hinanden. Så det vil langt fra være perfekt.

Jeg ville til hver en tid gå efter den anden løsning. Hvis du ikke kan det, så ville jeg lade være :)
Avatar billede mccookie Seniormester
11. april 2005 - 14:33 #10
Men i den forespørgelse tager vi ikke hensyn til at følgende er tilladt:

IP1 besøger 4 gange indefor en time
IP" besøger 3 gange indenfor samme time
Dermed bliver resultatet højst 4 og måske ikke noget istedet for 7
Avatar billede mccookie Seniormester
11. april 2005 - 14:34 #11
Måske er din idé arklund i virkeligheden også den mest databasevenlige med henblik på pladsen.........
Avatar billede barklund Nybegynder
11. april 2005 - 14:37 #12
Absolut - altså kun indsætte rækker, du rent faktisk skal bruge :)
Avatar billede barklund Nybegynder
11. april 2005 - 14:37 #13
Eller indsætte dem sammen med et lille flag - så du kan stadig se hvor mange eksponeringer du har i alt, men der er et lille flag, så du kan tælle hvor mange kvarters-unikke eksponeringer, der er ligeledes :)
Avatar billede mccookie Seniormester
11. april 2005 - 14:40 #14
flag??
Avatar billede martin1000ben Nybegynder
11. april 2005 - 14:43 #15
martin1000ben, det er jo slet ikke issuet. Vi skal have valgt alle, der ikke er inden for et kvarter i forhold til hinanden - ikke indenfor et kvarter i forhold til nu.

Så laver vi den da om til
WHERE ip = ip AND dato < DATE_ADD(timestamp, INTERVAL 15 minute) AND artikel = artikel

Den vil så hente brugerens IP og finde alle med dem med den IP og samme artikel nummer - så finder den sidste besøg og lægger 15 til
Avatar billede barklund Nybegynder
11. april 2005 - 14:43 #16
Ja, altså en attribut is_unique TINYINT(1) som du sætter til 0 eller 1 alt efter om det er et unikt besøg eller ej. Altså inden du indsætter tester du, om pågældende har besøgt artiklen (med unik flaget sat) indenfor det sidste kvarter. Så indsætter du igen med unik-feltet sat til 1 eller 0 alt efter resultatet af testen,
Avatar billede martin1000ben Nybegynder
11. april 2005 - 14:44 #17
WHERE ip = ip AND timestamp < DATE_ADD(timestamp, INTERVAL 15 minute) AND artikel = artikel

Lige en misser for ikk at forvirre helt :)
Avatar billede barklund Nybegynder
11. april 2005 - 14:46 #18
Hvordan skulle det virke? WHERE ip = ip - så kan du altså matche en tidligere række? Det vil jeg godt se :)
Avatar billede mccookie Seniormester
11. april 2005 - 14:49 #19
Jeg tror den idé du har barklund>> ikke er helt ved siden af og den er måske i virkeligheden også den lettes at konstruere.....
Avatar billede martin1000ben Nybegynder
11. april 2005 - 14:51 #20
den finder den tidligere række med samme IP
så finder den også med samme artikel nummer
også finder den sidst besøgt via timestampet og ligger 15 minutter til NOW()
(ja det skal være NOW() da det jo er tidspunktet nu -15 minutter du vil have fra valgte IP ikk?)

også er det bare at lave en COUNT() på SELECT'en og hvis der er 0 rækker så er det bare at smide en INSERT
Avatar billede barklund Nybegynder
11. april 2005 - 14:58 #21
martin1000ben, ja? Det har vi aldrig været i tvivl? Det har heller aldrig været spørgsmålet?

mccookie, nu ved jeg ikke hvilket sprog du bruger, men det skulle være forholdsvist ligetil at lave.
Avatar billede mccookie Seniormester
11. april 2005 - 15:21 #22
Helst alm. Mysql altså vel formentligt bare SQL via PHPmyadmin...
Avatar billede barklund Nybegynder
11. april 2005 - 15:42 #23
Men du har vel et eller andet scriptingsprog, der indsætter rækker i tabellen, når man besøger en artikel - det er her, du skal ændre noget :)
Avatar billede mccookie Seniormester
11. april 2005 - 15:43 #24
Nåh....ja....jeg bruger php og har med dit forslag fået nogle gode ideer.....
Avatar billede barklund Nybegynder
11. april 2005 - 15:44 #25
Så skulle det kunne laves ret nemt - sig til hvis jeg skal give hints til implementering , det fortsætter vi bare i dette spørgsmål :)
Avatar billede mccookie Seniormester
11. april 2005 - 16:10 #26
Det er bare helt iorden....

Jeg giver point og vender tilbage hvis jeg har problemer....
Avatar billede barklund Nybegynder
11. april 2005 - 16:20 #27
Finno :)
Avatar billede mccookie Seniormester
11. april 2005 - 23:52 #28
Hejsa

Lidt problemer med det videre arbejde:
SELECT count(news_logs_id) AS unik FROM news_logs WHERE ip = '217.116.248.10' AND news_logs_id = '1' AND unix_tid >= (unix_timestamp( ) -900)

INSERT INTO news_logs (news_logs_id, news_id, ip, tid, unix_tid, unik) VALUES ('', '1', '217.116.248.10', NOW() ,unix_timestamp(NOW()), '0')

Første del tjekker om der findes et entry indenfor de sidste 15 min fra den ip til den artikel....... men problemmet er at jeg har 3 artikler og ligeså snart den har sat et entry for det første besøg, så vil den ikke sætte noget entry på de øvrige artikler.... hvor er jeg fejlet......
Avatar billede barklund Nybegynder
11. april 2005 - 23:59 #29
Hm, det ser rigtigt ud - må vi se dit komplette php-script - og ikke bare SQL-sætningerne?
Avatar billede mccookie Seniormester
12. april 2005 - 00:00 #30
Så virker det s...... KANON....tror jeg ;)
Avatar billede mccookie Seniormester
12. april 2005 - 00:01 #31
Jeg skulle lige ændre news_logs_id (Den primær nøglen) til news_id (Som er artiklen)
Så virker det bare helt perfekt ;)
Avatar billede barklund Nybegynder
12. april 2005 - 00:04 #32
Hehe, fair nok :)
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