nieuw bericht

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Aad B

Aad B

20/12/2010 20:23:52
Quote Anchor link
Je hebt voor de koppeltabel alleen maar nodig:
- message_id
- user_id
met een index op beide attributen (jammer dat een index-only table nog niet kan in MySQL) en zodra een gebruiker het bericht leest doe je een delete from koppeltabel where user_id=$user_id and message_id=message_id. Voor het tonen van de messages met bijvoorbeeld een sterretje of een andere kleur doe je een outer join met de message table of een where exists naar de koppeltabel.
Gewijzigd op 20/12/2010 20:25:13 door Aad B
 
PHP hulp

PHP hulp

23/12/2024 18:24:57
 
Chrisy teleukomwaartezijn

chrisy teleukomwaartezijn

23/12/2010 21:12:38
Quote Anchor link
van john d is wel een goede, maar als een lid het bericht niet leest blijft er altijd wat in de koppeltabel staan. dus kan je beter een opschoonsysteem toepassen van aad b. ik het allemaal
 
Milo S

Milo S

24/12/2010 09:27:31
Quote Anchor link
@ gnotrgnotr gnotrgnotr;
Nee dat kan dus niet, lees eens het topic door, en dan vooral dat van Karl en Niels...

Database...

Topic
- id
- user_id
- title
- message
- dateTime

User
- id
- username
- password
- name

Read
- id
- uesr_id
- topic_id

Dan kan je door middel van de koppel-tabel (read) kijken of hij er in staat.
Zo niet; niet gelezen
Zo wel; wel gelezen
Zelfs kan je nog dateTime er aan toevoegen waardoor je weet wanneer hij hem gelezen heeft, of uitbreiden met kijken op de laatste post, heeft hij die gezien?

Succes!
 
John D

John D

24/12/2010 09:39:23
Quote Anchor link
@Milo S
Er is maar 1 goeie methode om je koppeltabel niet tot in de eeuwigheid te laten groeien en dat is de omgekeerde methode:

Read
- id <- mag weggelaten worden, is zinloos in koppeltabellen.
- usr_id
- topic_id

Dan kan je door middel van de koppel-tabel (read) kijken of hij er NIET in staat.
Zo niet; WEL gelezen
Zo wel; NIET gelezen
en deze delete je meteen zodra een lid het topic leest.

Het is slecht voor je performance en laat je tabel oneindig groeien om het te doen zoals je in 24/12/2010 09:27:31 beschrijft.
Gewijzigd op 24/12/2010 09:42:45 door John D
 
Jelmer -

Jelmer -

24/12/2010 09:45:51
Quote Anchor link
@John D dat ligt er toch heel erg aan hoeveel bezoekers consistent hun berichten lezen? Stel, ik neem een forum als PHPhulp als voorbeeld, met 50.000 leden. Ik denk dat 2% van alle geregistreerden de afgelopen maand actief is geweest. Zou Bas een PM sturen naar iedereen, dan leest maar 2% hem, 49.000 blijft dan bij jouw in de database staan. Neem je Milo's methode, dan komt er maar 1.000 regels in de database bij.

Met forum topics is het nog veel erger. Niemand leest alle forum topics. Bij iedere nieuwe post 50.000 regels toevoegen aan je database voor alle ongelezen status, lijkt mij niet bepaald goed voor je performance.

Edit: voor topics zou ik per gebruiker opslaan wanneer hij voor het laatst dat topic heeft geopend. Zijn er berichten aan dat topic toegevoegd nadat hij het heeft gelezen, dan zijn er nieuwe berichten. Op die manier heb je maar $aantal_gebruikers * $aantal_topics regels nodig in het ergste geval, niet $aantal_gebruikers * $aantal_posts. Ik zie dat Milo ook zoiets voorstelt, maar als je de datum opslaat kan je ook aangeven vanaf welke post de posts nieuw zijn.
Gewijzigd op 24/12/2010 09:49:03 door Jelmer -
 
John D

John D

24/12/2010 10:00:12
Quote Anchor link
@Jelmer: Goed punt inderdaad en dan wel pas een record toevoegen wanneer iemand een topic leest/gelezen heeft. Dit laat wel de koppeltabel steeds maar groeien....

Voor wat betreft je opmerking bij mijn methode: 49.000 blijft dan in de database staan is een schoningsmethode makkelijk: Na 1 maand verklaar je alles wat nog niet gelezen is als WEL gelezen en delete je een oude maand (instelbaar x maanden terug) geheel uit de koppel tabel. Je hoeft daarvoor geen datum in de koppeltabel op te nemen, die staat immers in de topic tabel. Met deze methode voorkom je oneindige groei in de koppeltabel.
 
TJVB tvb

TJVB tvb

24/12/2010 10:03:01
Quote Anchor link
John D, die opschoning kun je ook doen als je de records toevoegt als er gelezen is. Al ben ik standaard geen fan van opschonen, ik bewaar graag alles
Je hebt dan:
Topics gelezen
Topics niet gelezen
Topics ouder dan een maand
 
John D

John D

24/12/2010 10:08:52
Quote Anchor link
TJVB tvb op 24/12/2010 10:03:01:
Al ben ik standaard geen fan van opschonen, ik bewaar graag alles
Zolang je niet te maken hebt met uit zijn voegen groeiende database en daarmee gepaard gaan performance problemen kan je natuurlijk best bewaren omdat je graag alles bewaart. Toch vind ik dat je bij je datamodellering al na moet denken over schonen van gegevens die toch nooit meer geraardpleegd worden en die niet vallen onder een of andere bewaarplicht zoals de belasting. Dus niet bewaren om het bewaren!
 
TJVB tvb

TJVB tvb

24/12/2010 10:17:50
Quote Anchor link
Daar heb je gelijk in, al wordt komt er wel een export van de data voordat die uit de database verwijderd wordt (heb al een paar keer gehad dat het heel handig bleek dat die export er nog was)
 
John D

John D

24/12/2010 10:22:38
Quote Anchor link
@TJVB tvb: archiveren voordat je schoont is uiteraard een goeie zaak, dat kan je off-site bewaren op een ander en/of goedkoper medium.
Edit:

Voor Ozzie: Ik neem aan dat je uit deze topic een goeie methode kan bouwen.
Gewijzigd op 24/12/2010 10:24:04 door John D
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.