nieuw bericht
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?
user - bericht.
Hou daar bij user_id, bericht_id, tijd.
Is er nog geen record (combinatie user_id - bericht_id): echo sterretje
Kan. Of de wat simpele manier, een extra kolom met actief, ja of nee..
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.
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.
Niels Kieviet op 16/12/2010 12:02:06:
Ik bedoelde, dat de tabel waarin de berichten worden opgeslagen extra kolommetje kreeg.
Daar heb je helemaal gelijk in.
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.
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?
Hoe weet je dan per gebruiker of een lid het gelezen heeft?
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 :)
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
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
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.
Ik zeg ook niet dat het de beste oplossing is, maar het kan wel. Maar goed, koppel tabel is natuurlijk het beste.
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.
/me bad :)
bedankt voor jullie hulp, ik ga het maar eens proberen.
Gewijzigd op 20/12/2010 12:35:55 door John D
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.
- 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
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.
@gnotrgnotr kwadraat: fout, jij hebt het niet begrepen. In jouw geval groeit de koppeltabel explosief en oneindig.
Gnotrgnotr gnotrgnotr op 20/12/2010 19:17:28:
Tabel berichten:
- userid
- username
- datum
- posterid
- postername
- gelezen
- 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?