webForumDet fria alternativet

Forum - visa olästa trådar

ASP

19 svar · 329 visningar · startad av Mungo

Medlem sedan jan. 2000372 inlägg
Frågan#1

Hej där,
tänkte höra om nån har några fräscha tankar kring hur man bygger upp ett forum så att man markerar trådar/poster som är olästa - dvs om man har ett användarID knutet till användaren på något sätt, hur borde man tänka för att göra detta smartast?

Alternativ:

1. I en separat tabell lagra kopplingar postID-användarID

2. I en posttabell lagra lista på användare som läst inlägget

3. I användartabellen lagra postID på de poster som användaren läst.

Alla idéer och tankar emottages tacksammast. :)

Medlem sedan juli 20011 084 inlägg
#2

tja det e väll bara att köra med sessions kanske när han går in på forum inlägget sparas hans användarID som ligger i session, som att han har läst det(i forum inläggest tabell) och sparas i hans tabell att han har läste det. Och för att veta vem som skrivir det är det ju bara att skriva postID och AnvändarID i samma tabel och när någon gör en post så sparas hans post ID? jag gissar att det var så du menade... kan hända att jag förklarade dåligt jag vet inte men ;)

Medlem sedan jan. 2000372 inlägg
#3

Du får nog jobba lite på svenskan... ;)

Jag kanske ska förtydliga mig lite. Jag har inget problem att _bygga_ en sån här lösning, jag tänkte mest höra om någon hade några trevliga idéer kring hur man bygger detta lite optimerat så att det går hyfsat snabbt att skriva ut forumet. Att göra ett databasuppslag för varje post som listas känns inte som den bästa lösningen...

Medlem sedan dec. 19996 721 inlägg
#4

Alternativ 1 är det vettigaste, rent databasmässigt, men tänk på att det blir massiva datamängder om forumet är stort. 1000 inlägg som läses av 1000 användare blir 1 miljon rader i tabellen.

------------------
/emission
If you see someone without a smiley, give them your colon.

Medlem sedan jan. 2000372 inlägg
#5

Ja, det var just det...

Därför funderar jag på om man ska lägga till ett fält i post-tabellen som innehåller ID på de användare som läst inlägget, kommaseparerat eller nåt. Mindre datamängd men man får hitta på nån vettig funktion som plockar ut ens ID vid varje postvisning och det blir också en del data som skickas om vi fortsätter att leka med 1000*1000...

Jag får nog testa lite olika sätt.

Medlem sedan juli 20011 084 inlägg
#6

okej sorry missuppfattade dig lite där! :r

Medlem sedan feb. 20012 412 inlägg
#7

Hej!

Till mitt forum använder jag kakor. När besökaren kommer kollar jag om det är första gången besökaren är där, är det så lagrar jag datum och tid i en kaka. När besökaren återkommer jämför jag datumet/tiden i kakan med datumfältet i vart inlägg. Är datumfältet större än kakans skriver jag ut en ikon "oläst" annars en ikon "läst". Därefter sätter jag ett färskt datum i kakan.

mvh Jörgen :)

------------------
Varför bråka när man kan kramas?

Medlem sedan jan. 2000372 inlägg
#8

Jo, jag har tidigare haft en sån lösning också. Det finns dock några problem med den:

Till att börja med så innebär detta att nya inlägg endast markeras första gången användaren visar sidan vid varje besök. Eftersom kakan sätts till nytt datum vid listningen kommer alla inlägg att vara gamla nästa gång man listar inläggen, vilket kan vara 30 sekunder senare.

Dessutom blir ju inte funktionen så användbar om flera delar på samma dator eller om man byter dator mellan jobbet och hemma ofta. Därför vill jag ha en funktion som är kopplat till användarID och inte en specifik klient.

Annars är nog det där den enklaste och minst kraftkrävande lösningen.

Medlem sedan sep. 200182 inlägg
#9

Jag hade nog helt klart kört på alternativ 1, med en tabell där både postID och anvID ingår och är nyckel i tabellen...
Detta borde fungera bäst prestandamässigt (känns det som, ingen erfarenhet direkt), även om det skapar lite större datamängder...
Men skillnaden i mängden data borde inte vara sååå stor...(typ dubbelt så stor bara eller nåt).

Okej att det blir många fler rader data i tabellen, men om man jämför antal tecken så skiljer det inte ruskigt mycket...

Så jag tycker nog alt 1, oavsett om det tar lite mer plats...

/Kallepocket

Medlem sedan dec. 19996 721 inlägg
#10

Instämmer. Ytterligare en fördel är att du då endast behöver göra en INSERT till den tabellen, när någon läser ett inlägg. Annars hade du behövt göra en UPDATE, vilket är mer resurskrävande.

Börja med alt 1. Skulle det visa sig att det inte håller så har du i alla fall all rådata för att bygga om.

Medlem sedan maj 20011 312 inlägg
#11

Jag tänkte börja med en liknande funktion. För att undvika att det blir så hiskligt många rader så kanske man kan ha olästa meddelanden tex månadsvis? Förstår du hur jag menar?

------------------
Alltid lär man sig något nytt varje dag...

Medlem sedan maj 2001431 inlägg
#12

För skojs skull kan nämnas att jag gjorde lite tester på ett sådant forum för länge sedan. Datamängden var ca 100.000 inlägg och 100 användare. Lästa tabellen innehöll en hel del rader...
Hade ytterligare en tabell joinad för att kolla rättigheter. Om jag inte minns fel tog en sidvisning med senaste 50 inläggen drygt 40 sekunder. Använde access 97.

------------------
En eller annan godbit från pannan

Medlem sedan jan. 2000372 inlägg
#13

Man kan undra hur UBB (infopop.net) gör med sitt forum - de har ju miljontals forum ute på nätet och alla stöder "nya inlägg sedan senaste besök" även om man inte är inloggad. Snabbt går det också. De MÅSTE göra det med kakor på nåt vis men samtidigt TROR jag att om man är registrerad medlem så kommer forumet ihåg lästa inlägg när man loggar in - nån kombination kanske...

Medlem sedan dec. 19998 577 inlägg
#14

Det är bara att lagra datumet/tiden man senast besökte forumet i en kaka, och sedan jämföra med dagens datum/tid och visa dom som är nyare än det som är lagrat i kakan.

------------------
Doesn't 'expecting the unexpected" make the unexpected expected?
un.eyebew

Medlem sedan jan. 2000372 inlägg
#15

Ja, fast läs mitt inlägg ovan ang. samma förslag... ;)

Medlem sedan jan. 2001510 inlägg
#16

Även om jag är rookie på forum så gör jag ett försök. ;)

Låt säga att du har ett forum med tråd-id och inläggs-id. Om tråd-id ingår i inläggsid:t och du även med tråden har tillgång till senaste-inläggs-id så kan du lätt räkna ut dels om det finns nya inlägg i tråden dels hur många fler nya inlägg det finns.

Alternativ 1 är det vettigaste, rent databasmässigt, men tänk på att det blir massiva datamängder om forumet är stort. 1000 inlägg som läses av 1000 användare blir 1 miljon rader i tabellen.

När du sedan besöker tråden så ersätter du det gamla senaste-inläggs-id:t med det nya. På så sätt så behöver du bara spara ett inlägg per tråd. Lägger du till en datumfunktion på det så kan du även minska den ytterligare. I och med att du bara sparar de trådar som användaren besökt så minskas tråden också lite till.

Alla senaste-inläggs-id:n skulle man kanske kunna spara kommaseparerat och sedan använda RegExp för att sortera ut. Man har ju bara en per tråd-id så det lär ju inte bli några problem.

Åsikter? Var det någon som hajjade vad jag menade? :)

/JANspeed

Medlem sedan jan. 2000372 inlägg
#17

Jag tror inte jag fattar helt... :)

Du säger:

Om tråd-id ingår i inläggsid:t och du även med tråden har tillgång till senaste-inläggs-id

Menar du då att inläggsID skulle vara konstruerat som ex 142:1211 där 142 är trådens ID och 1211 är postens ID?

Du säger också:

När du sedan besöker tråden så ersätter du det gamla senaste-inläggs-id:t med det nya. På så sätt så behöver du bara spara ett inlägg per tråd. Lägger du till en datumfunktion på det så kan du även minska den ytterligare. I och med att du bara sparar de trådar som användaren besökt så minskas tråden också lite till.

Hur menar du då? Du har inte det här implementerat nånstans där man kan få titta eller har lite kodexempel? Ditt förslag låter som det redigaste hittills det var bara lite svårbegripligt vid första anblick. :)

[Redigerat av Mungo den 03 okt 2001]

Medlem sedan jan. 2001510 inlägg
#18

Hehe. Nä tyvärr så är det inte dokoumenterat eller kodat. Sa ju att jag är rookie på forum. :)

Menar du då att inläggsID skulle vara konstruerat som ex 142:1211 där 143 är trådens ID och 1211 är postens ID?

Precis. Fast jag antar att du menar att 142 är tråd-id:t. ;)

Då kan du också alltid få reda på vilken tråd ett inlägg hör till.

När du sedan besöker tråden så ersätter du det gamla senaste-inläggs-id:t med det nya. På så sätt så behöver du bara spara ett inlägg per tråd.

Låt säga att du besöker tråden igen efter att ha besökt tråden tidigare. Först söker sidan reda på det inläggs-id som sparades i din profil senast. Dvs. det id som det sista inlägget i tråden hade.

Sedan jämför sidan inläggs-id:t med det inlägg som nu är postat sist i tråden. Du får då fram hur många inlägg som som är nya sedan du sist besökte sidan.

Avslutningsvis sparar du över det gamla id:t i din profil med det nya.

Exempel:
----------------
Id i din profil = 142:1211
Senaste tråd-id = 142:1214

142:1211 = 142:1214 - 3

dvs. 3 st nya inlägg.

Nytt Id i din profil = 142:1214
----------------
Är du med? :)

Lägger du till en datumfunktion på det så kan du även minska den ytterligare.

Det jag menar är att om du bestämmer att bara visa vilka trådar som innehåller nya inlägg efter ett visst datum låt säga 30 dagar tillbaka i tiden så är det ju ännu mindre inlägg som man behöver spara ner och komma ihåg. Dock så måste man ju göra en funktion för att rensa.

exempel:
---------------
Om senaste-inläggs-datum för denna tråd är äldre än 30 dagar tillbaka i tiden. Ta bort det inläggs-id:t som tillhör den tråden.
---------------

I och med att du bara sparar de trådar som användaren besökt så minskas tråden också lite till.

Eftersom du bara sparar ner senaste-inläggs-id från de trådar användaren besökt så minskas också antalet inläggs-id:n som måste sparas i profilen.

Det blev mycket text. Hoppas du blivit klokare på vad jag menade. :)

/JANspeed

Medlem sedan jan. 2000372 inlägg
#19

Japp, nu är jag med bättre. Det var ett uppfriskande förslag. Tror jag ska testa det faktiskt.

Enda potentiella nackdelen som jag ser är att man förutsätter att nyare inlägg alltid har ett högre värde som ID... Om räknaren måste nollställas eller av annan anledning flyttas om funkar det inte. Men å andra sidan kanske det aldrig behöver hända.

Tack för tankearbetet! :)

Medlem sedan jan. 2001510 inlägg
#20

Ingen orsak.

Tror jag ska testa det själv någon gång. :)

268 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
124 ms — ändringar (db)