Avatar billede kook Nybegynder
15. december 2008 - 23:07 Der er 14 kommentarer og
1 løsning

Angiv læste/ulæste emner i forum

Nu har jeg sådan for sjovs skyld forsøgt mig med at prøve at bygge et forum i PHP. Ikke noget stort og voldsomt, men mest for at jeg skal lære mig selv nogen ting.
Langt de fleste ting er på plads, så som login, kategorier, topics og replies og så videre. Men- jeg kan for livet af mig ikke lure hvordan hulen jeg får scriptet til at se om en bruger har læst et specifikt topic eller ej!?

Er der en her der har en ide, eller et forslag til hvordan jeg knækker den nød?
Avatar billede jensgram Nybegynder
15. december 2008 - 23:23 #1
Det er vel et spm om at vedligeholde en masse brugerID-topicID relationer.
Avatar billede jensgram Nybegynder
15. december 2008 - 23:24 #2
Altså en mange-til-mange relation, der opdateres når en bruger læser en tråd. (Og hvor der evt. slettes igen når en tråd får nye indlæg.)
Avatar billede kook Nybegynder
16. december 2008 - 06:47 #3
Så vi snakker om at lave en tabel der med strukturen (id, bruger_id, topic_id) og så simpelt hen style ud fra det?
Og opdatere den hver gang en bruger åbner et emne ... det burde man jo nok kunne gøre med en function af en eller anden art.
Avatar billede jensgram Nybegynder
16. december 2008 - 07:18 #4
Præcis.

Men der er, så vidt jeg kan se, ingen grund til et selvstændigt ID i denne tabel. (bruger_id, topic_id) er unik og kan bruges som primær nøgle - måske som (topic_id, bruger_id) i stedet - og med indeks på bruger_id.
Avatar billede kook Nybegynder
16. december 2008 - 09:14 #5
Super, Jens. Det prøver jeg at rode med. Tak for hjælpen.
Avatar billede jensgram Nybegynder
16. december 2008 - 17:15 #6
Velbekomme
Avatar billede kook Nybegynder
16. december 2008 - 20:57 #7
Lige en hurtig opfølgning hvis jeg må? Er det ikke uhensigtmæssigt at lave for mange queries til databasen for hver indlæsning?
Avatar billede jensgram Nybegynder
17. december 2008 - 12:37 #8
Som udgangspunkt gælder det vel om at trække lige præcis dét ud som du har brug for - ikke mere. Kan det så gøres i få omgange vil det være at foretrække.

En potentiel dræber er at udskrive en liste over tråde og så for hvert punkt lave en query, der henter data for denne tråd. I sådanne tilfælde vil det helt klart være at foretrække, hvis man kan lave en mere kompleks query, der hiver det hele ud af én omgang.

Det er naturligvis altid et spørgsmål om udstyr og brug, så et forkromet svar hverken tør eller kan jeg give :)
Avatar billede kook Nybegynder
17. december 2008 - 12:50 #9
Det er skam intet forkromet jeg ønsker. Der er dog lige en ting der slår mig ...
Min table med topics ser ud som følger (id, title, content, date_written, author_id, is_reply_to_id). Ved at bruge den model med en relationel tabel så får jeg kun vist om man har læst det første, altså oprindelige, topic?
Avatar billede jensgram Nybegynder
17. december 2008 - 13:15 #10
Så laver du vel også "bare" en relation for hver topic med is_reply_to_id (i.e. hvert svar). Eller misforstår jeg?
Avatar billede kook Nybegynder
17. december 2008 - 13:23 #11
Jeg tror du forstår mig ret. Når der bliver lavet et nyt topic, så defaulter is_reply_to_id til "0". Og når der laves svar til et indlæg, så ligger de med det rigtige id-nummer i is_reply_to_id. Men det virker bare voldsomt og meget bloated at skulle lave en relation for hver enkelt topic og svar til topic, selvom jeg umiddelbart godt kan se at det er den bedste løsning.
Avatar billede kook Nybegynder
17. december 2008 - 13:25 #12
Hov. Teoretisk set kunne man vel istedet for at lægge en ny row ind for hver gang der bliver besvaret så kan jeg vel bruge det id jeg sætter ind i reply_to_id, og går den relationelle tabel igennem og fjerner de rows der svarer overens med det id? Eller er det dumt?
Avatar billede jensgram Nybegynder
17. december 2008 - 16:31 #13
Nej, det kunne man vel godt.

Alternativt kunne du have din læst-relation som (topic_id, bruger_id, tid), og så tjekke, om der er nyere indlæg med topic_id = is_reply_to_id... Så skal tid blot opdateres ved læsning. Er ikke klar over, om det er "pænere".
Avatar billede kook Nybegynder
17. december 2008 - 16:58 #14
Umiddelbart, og igen - jeg er amatør, men umiddelbart forekommer det mig at idéen med at slette relationer når der laves nye indlæg lægger lavere pres på databasen, plus umiddelbart ville det jo kun kræve et row pr. bruger/topic sæt, istedet for flere for hver gang man læser et nyt indlæg? Men det er da ganske muligt at jeg tænker forkert her ...
Avatar billede jensgram Nybegynder
17. december 2008 - 17:21 #15
Ja, men skulle vel foretage en egentlig benchmarking, hvis man have tid og lyst. Men mon ikke din løsning er helt fin til brugen? Det tror jeg.
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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