Gelezen of niet?

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

 - Diov  -

- Diov -

12/05/2013 15:48:27
Quote Anchor link
Beste,

Iedereen kent het wel, als je een mail ontvangt, en je hebt die nog niet gelezen, dan staat die in een ander kleur/vetjes (etc.)

Nu heb ik niet met een mail gewerkt, maar met mededelingen.
Een mededeling kan door iedereen gelezen worden.

Ik wil, als je de mededeling gelezen hebt, dat de mededeling niet meer in een ander kleur komt te staan.
Hoe pak ik dit het best aan?

Diov
 
PHP hulp

PHP hulp

17/11/2024 22:58:00
 
Wouter J

Wouter J

12/05/2013 16:38:16
Quote Anchor link
Je zal eerst moeten bepalen wat je 'gelezen' vind. Facebook vind een melding gelezen als je er op hebt geklikt, github vind een notificatie gelezen zodra je op de pagina bent geweest, magister vind een mail gelezen zodra je x aantal secoden de mail open hebt staan.

Daarna moet je kijken hoe je de situatie gaat aanpakken: Heb je AJAX nodig of kan het allemaal server-side?
 
 - Diov  -

- Diov -

12/05/2013 16:40:21
Quote Anchor link
Ik zou het als gelezen beschouwen als erop gedrukt is.
Me vraag is eigenlijk, zet ik dan de gebruiker_id in een aparte tabel samen met het topic-id?

& hoe controleer ik dan eigenlijk of het id daar bevind?
Is dat dan gewoon met mysqli_num_rows ?

Diov
 
Tobias Tobias

Tobias Tobias

12/05/2013 16:42:44
Quote Anchor link
Ik neem aan dat de mededelingen in een database zitten?

Dan kun je een koppeltabel aanmaken tussen de berichten-tabel en de user-tabel:
user_id
mededeling_id

Als iemand een mededeling leest, zet je dit in de koppeltabel.
Als de combi van user en mededeling in de tabel bestaat (mysql_num_rows > 0), dan moet de gewone kleur weergegeven worden
 
Wouter J

Wouter J

12/05/2013 16:52:17
Quote Anchor link
Ik denk dat mededeling-user een n-1 relatie is? Dan is een koppeltabel niet nodig.
Gewijzigd op 12/05/2013 16:52:44 door Wouter J
 
Tobias Tobias

Tobias Tobias

12/05/2013 16:56:39
Quote Anchor link
@Wouter: wat bedoel je daarmee?
 
Wouter J

Wouter J

12/05/2013 17:00:11
Quote Anchor link
1 user heeft n aantal mededelingen. Dus een OneToMany relation. Dan zou ik het zo doen:

users
id
name
...

notifications
id
...
user_id

En dan kun je queries als SELECT ... FROM notifications WHERE user_id = ... gebruiken. Het gebruik van een koppeltabel is dan naar mijn mening veel te ingewikkeld en onnodig.
 
Tobias Tobias

Tobias Tobias

12/05/2013 17:05:27
Quote Anchor link
Maar hoe krijg je dan meerdere users in de notifications?
Moet je dan niet een heleboel kolommen user_id aanmaken? Of berichten dubbel plaatsen met verschillende user-id's?
 
 - Diov  -

- Diov -

12/05/2013 17:07:59
Quote Anchor link
Ik heb nu deze query:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$sql_select_berichten = "SELECT m.id, m.onderwerp, m.plaatser, m.datum, g.id, g.user_id, g.topic_id
              FROM mededelingen As m
              LEFT JOIN mededelingen_gelezen As g
              ON m.plaatser = g.topic_id
              ORDER BY datum ASC
            ";


Dus, nu wil ik controleren of g.user_id (of g.topic_id) bestaat.
Is dat dan gewoon zoiets:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
if(!isset($row_select_berichten['g.user_id'])) {
   // Het bestaat niet, andere style.
}
?>


Edit: verkeerde ON . Even aangepast
Gewijzigd op 12/05/2013 17:12:08 door - Diov -
 
Wouter J

Wouter J

12/05/2013 17:08:45
Quote Anchor link
Elke user heeft toch zijn eigen notificatie? Anders kun je nooit aangeven wie iets wel en wie iets niet heeft gelezen.

Als het zo is dat elke notificatie meerdere users kan hebben, en dus een n-n of ManyToMany relatie hebben, dan moet je inderdaad wel een koppeltabel hebben.
 
 - Diov  -

- Diov -

12/05/2013 17:16:14
Quote Anchor link
@Wouter, dat was ik dus van plan. Alleen noemt m'n tabel mededelingen_gelezen in plaats van notificaties.
Nu vraag ik me af hoe ik controleer of de mededeling gelezen is.
 
Wouter J

Wouter J

12/05/2013 17:22:57
Quote Anchor link
een tabel met ongelezen meldingen noem je mededelingen_gelezen?
 
 - Diov  -

- Diov -

12/05/2013 17:27:10
Quote Anchor link
Oké,

Ik dacht dat je het volgende bedoelde:
-> Gebruiker drukt op de ongelezen mededeling : er komt een record in de database (mededelingen_gelezen)

Dus, jij zou het anders doen:
Telkens je een nieuwe mededeling komt, per gebruiker een record toevoegen in de database?
 
Wouter J

Wouter J

12/05/2013 17:27:28
Quote Anchor link
Even een voorbeeldje gemaakt, omdat je het volgens mij nog niet helemaal door hebt.
Gewijzigd op 12/05/2013 17:29:13 door Wouter J
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

12/05/2013 19:07:48
Quote Anchor link
Wat Diov wilt kan ook heel goed, dan hoef je in de koppeltabel alleen de gelezen bericht opslaan.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
SELECT
    m.mededeling_id, m.mededeling_tekst,
    IF(g.mededeling_id IS NULL, 0, 1) gelezen
FROM
    mededelingen
LEFT JOIN
    (SELECT mededeling_id
    FROM mededelingen_gelezen
    WHERE user_id=1234) g
 
Wouter J

Wouter J

12/05/2013 19:17:56
Quote Anchor link
Maar Ger, is een koppeltabel niet veel te lastig voor zoiets? (maw, wat zou je zelf doen?)
 
Ger van Steenderen
Tutorial mod

Ger van Steenderen

12/05/2013 19:28:58
Quote Anchor link
Als ik Diov goed begrijp heeft hij dezelfde mededelingen voor alle gebruikers, en dan kan je niet zonder koppeltabel.
 
Eddy E

Eddy E

12/05/2013 21:16:36
Quote Anchor link
Inderdaad: wat bedoel je met 'mededelingen'?
Zoals bij phpBB waar een mededeling een bericht is voor ALLE gebruikers die echt belangrijk is?
Of meer zoals Facebook, waar het meer een 'persoonlijk bericht' is?

In geval phpBB: koppeltabel: 1 bericht moet door alle leden gelezen worden >> user leest bericht = rij toevoegen
In geval Facebook: geen koppeltabel, maar zoals Wouter J omschrijft.
 
 - Diov  -

- Diov -

12/05/2013 21:25:34
Quote Anchor link
@ Eddy,

Inderdaad, het moet voor alle gebruikers zichtbaar zijn.
Alleen snap ik dit niet van Ger in de query:

IF(g.mededeling_id IS NULL, 0, 1) gelezen

Een id zal toch nooit NULL, 0 of 1 bevatten (bijna nooit)
 
Wouter J

Wouter J

12/05/2013 21:43:42
Quote Anchor link
Je leest die functie verkeerd, het is IF(conditie, waarde-bij-true, waarde-bij-false)
 
Willem vp

Willem vp

12/05/2013 23:09:50
Quote Anchor link
- Diov - op 12/05/2013 21:25:34:
Alleen snap ik dit niet van Ger in de query:

IF(g.mededeling_id IS NULL, 0, 1) gelezen

Een id zal toch nooit NULL, 0 of 1 bevatten (bijna nooit)

Dit is een if-then-else-constructie. Als een gebruiker een bericht nog niet gelezen heeft, zal de gejoinde kolom g.mededeling_id de waarde NULL bevatten. De kolom 'gelezen' krijgt in dat geval de waarde 0. Als het bericht wel gelezen is, is g.mededeling_id niet NULL en krijgt gelezen de waarde 1.

Voor het mooie zou je het eigenlijk moeten herschrijven als:

IF(g.mededeling_id IS NULL, 0, 1) AS gelezen

zodat het duidelijker is dat de return-waarde van het IF-statement wordt toegekend aan de kolom 'gelezen'.
Gewijzigd op 12/05/2013 23:11:35 door Willem vp
 

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.