nieuw bericht

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Chrisy teleukomwaartezijn

chrisy teleukomwaartezijn

16/12/2010 10:14:45
Quote Anchor link
ben ik bezig met een forum maken, maar ik kom niet uit het volgende:

ik wil als er een nieuw bericht geplaatst wordt, en het lid heeft het nog niet gelezen, dat er dan ee sterretje komt. als het lid het bericht daan leest gaat het sterretje weer weg.

ik heb geen idee hoe ik dit moet doen. ik heb al meerdere manieren geprobeerd, maar het lukt niet. kan iemand mij helpen?
 
PHP hulp

PHP hulp

23/12/2024 17:43:38
 
Kris Peeters

Kris Peeters

16/12/2010 10:24:37
Quote Anchor link
Maak een koppeltabel
user - bericht.

Hou daar bij user_id, bericht_id, tijd.
Is er nog geen record (combinatie user_id - bericht_id): echo sterretje
 
Niels K

Niels K

16/12/2010 11:37:14
Quote Anchor link
Kan. Of de wat simpele manier, een extra kolom met actief, ja of nee..
 

16/12/2010 11:38:57
Quote Anchor link
Niels Kieviet op 16/12/2010 11:37:14:
Kan. Of de wat simpele manier, een extra kolom met actief, ja of nee..


Hoe wil je dat doen? Welke tabel moet er überhaupt volgens jou een extra kolom krijgen?

Als je een n:m, of *:*, of meervoudige relatie hebt, dan zul je per definitie een koppeltabel moeten gebruiken.
 
Niels K

Niels K

16/12/2010 12:02:06
Quote Anchor link
Ik bedoelde, dat de tabel waarin de berichten worden opgeslagen extra kolommetje kreeg.

Quote:
Als je een n:m, of *:*, of meervoudige relatie hebt, dan zul je per definitie een koppeltabel moeten gebruiken

Daar heb je helemaal gelijk in.
 

16/12/2010 12:05:05
Quote Anchor link
Niels Kieviet op 16/12/2010 12:02:06:
Ik bedoelde, dat de tabel waarin de berichten worden opgeslagen extra kolommetje kreeg.

Quote:
Als je een n:m, of *:*, of meervoudige relatie hebt, dan zul je per definitie een koppeltabel moeten gebruiken

Daar heb je helemaal gelijk in.


Dat kan dus niet.
 
Niels K

Niels K

16/12/2010 12:23:02
Quote Anchor link
@Karl

Waarom kan het niet? Volgens mij snappen wij elkaar niet? Voorbeeld, je hebt zo'n soort tabel:

message_id,
name,
message,
datetime

etc

en daar gooi je een extra kolom met 'active' in en kies je eventueel voor een enum voor ja nee. En met een update query zet je zo nodig active op een andere waarde. Hoe kan dat volgens jouw dan niet?
 
TJVB tvb

TJVB tvb

16/12/2010 12:27:42
Quote Anchor link
Hoe weet je dan per gebruiker of een lid het gelezen heeft?
 
Jens V

Jens V

16/12/2010 12:33:38
Quote Anchor link
TJVB tvb op 16/12/2010 12:27:42:
Hoe weet je dan per gebruiker of een lid het gelezen heeft?


Inderdaad. Je moet voor iedere gebruiker opslaan of hij het reeds gelezen heeft of niet. En dat kan je niet zonder koppeltabel. Je kan moeilijk bij dat extra veld alle id's van gebruikers die het hebben gelezen met komma's gescheiden opslaan, eh :)
 
Gerhard l

gerhard l

16/12/2010 12:34:39
Quote Anchor link
je zou (beetje vergezocht misschien) je tabel maken met :
message_id,
name,
message,
datetime,
active,
poster_id

en dan wanneer het bericht geopent word
if($row['active'] == 1 bijvoorbeeld
if($_SESSION['userid'] == $row['poster_id']){
een popupje met bijv: Ik ben de poster en hebt het gelezen, klik hier om door te gaan, en via die link update je active naar 0 of 2 en krijg je die pop up niet meer


edit:
of gaat dit voor alle leden apart, een bevesitigng?
Gewijzigd op 16/12/2010 12:36:01 door gerhard l
 
Jens V

Jens V

16/12/2010 12:37:14
Quote Anchor link
Het moet toch allemaal niet zo ingewikkeld. Doe het gewoon zoals Kris zegt:
Kris Peeters op 16/12/2010 10:24:37:
Maak een koppeltabel
user - bericht.

Hou daar bij user_id, bericht_id, tijd.
Is er nog geen record (combinatie user_id - bericht_id): echo sterretje


Meer is het niet.
 
Niels K

Niels K

16/12/2010 12:38:31
Quote Anchor link
Ik zeg ook niet dat het de beste oplossing is, maar het kan wel. Maar goed, koppel tabel is natuurlijk het beste.
 

16/12/2010 12:48:51
Quote Anchor link
Niels Kieviet op 16/12/2010 12:38:31:
Ik zeg ook niet dat het de beste oplossing is, maar het kan wel. Maar goed, koppel tabel is natuurlijk het beste.



Nee. Dat kan niet.
Omdat het dus een m:n relatie is. Een many-to-many relatie. Als jij in de berichten tabel een extra kolom toevoegt, met waarde ja / nee heb je geen eens een relatie meer.
Je hebt meerdere gebruikers en meerdere berichten. Elke gebruiker kan meerdere berichten hebben gelezen (of niet). En elk bericht kan door meerdere gebruikers zijn gelezen (of niet).
Als jij het met een extra kolom wilt doen, dan komt er zomaar soms eens een waarde dat dat bericht gelezen is. Dat is fout.
De enige oplossing voor een m:n probleem is een koppeltabel.
 
Niels K

Niels K

16/12/2010 13:10:07
Quote Anchor link
Heb je gelijk in, had niet over de mogelijkheid nagedacht met meerdere gebruikers.

/me bad :)
 
Chrisy teleukomwaartezijn

chrisy teleukomwaartezijn

20/12/2010 11:22:14
Quote Anchor link
bedankt voor jullie hulp, ik ga het maar eens proberen.
 
John D

John D

20/12/2010 12:33:02
Quote Anchor link
In verband met de performance raad ik aan om de koppeltabel te vullen met berichten die nieuw zijn en voor die user te deleten zodra die user het gelezen heeft. Dit heeft als voordeel dat de tabel niet enorm groeit omdat je delete. Een koppeltabel met ALLE berichten voor ALLE users en dan een marker wanneer iemand het gelezen heeft is in mijn visie dus de omgekeerde wereld en vreet records/diskruimte/performance. De tabel kan beter 5 records bevatten met id's van berichten die ik nog niet gelezen heb dan 1550 id's die ik wel gelezen heb. In beide gevallen moet je dus voor alle users een record toevoegen die "nog niet gelezen" weergeeft. Ik vraag mij af wat dat aan performance kost. Ik zie deze functionaliteit in veel fora waaronder phpBB maar ik heb me nog nooit verdiept in de oplossing....
Gewijzigd op 20/12/2010 12:35:55 door John D
 
Kris Peeters

Kris Peeters

20/12/2010 17:26:20
Quote Anchor link
Ja, het lijkt me wel dat je een punt hebt.

Nu, in hoeverre is het echt een probleem dat er heel veel records aanwezig zijn?
Zeker mocht je een goede index kiezen.

Ik weet er het fijne niet van.
 
Maarten PHP

Maarten PHP

20/12/2010 19:17:28
Quote Anchor link
Tabel berichten:
- userid
- username
- datum
- posterid
- postername
- gelezen

het gaat om de laatste en als je hem gaat lezen moet PHP hem op true zetten
Gewijzigd op 20/12/2010 19:17:46 door Maarten PHP
 
Bas Cost Budde

Bas Cost Budde

20/12/2010 19:25:43
Quote Anchor link
John, een uitstekende benadering! Een bericht wordt 1x gepost, en veelvoudig gelezen.

Heb je 400 gebruikers en 200 nieuwe berichten, dan staan er natuurlijk wel 80.000 entries in de koppeltabel. Maar, dat is niet zoveel hoor, in termen van performance, gegeven goede indexen.

Om het aantal te drukken zou je in het gebruikersprofiel een schakeloptie kunnen opnemen: Markeer nieuwe berichten (default False). Dan moet iedereen de functie al inschakelen, wil het tot grote aantallen leiden.
 
Aad B

Aad B

20/12/2010 20:06:26
Quote Anchor link
Verder zou je ook een strategie voor opschonen kunnen toepassen: alle nieuwe berichten ouder dan 6 weken (admin, instelbaar) worden automatisch gemarkeerd als gelezen (en dus gedelete in de koppeltabel). Dat beschermt je tegen oneindig vullen van de koppeltabel.
@gnotrgnotr kwadraat: fout, jij hebt het niet begrepen. In jouw geval groeit de koppeltabel explosief en oneindig.
 
Wouter J

Wouter J

20/12/2010 20:12:32
Quote Anchor link
Gnotrgnotr gnotrgnotr op 20/12/2010 19:17:28:
Tabel berichten:
- userid
- username
- datum
- posterid
- postername
- gelezen

Waarom half engels half nederlands?
Gnotrgnotr gnotrgnotr op 20/12/2010 19:17:28:
het gaat om de laatste en als je hem gaat lezen moet PHP hem op true zetten

Dit moet je dus voor elke aparte bezoeker doen. Hoe wil je dat op deze manier doen?
 

Pagina: 1 2 volgende »



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.