15. december 2008 - 23:07Der 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?
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.
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.
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 :)
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?
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.
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?
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".
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 ...
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.
Synes godt om
Ny brugerNybegynder
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.