Mysql
 sql >> Base de données >  >> RDS >> Mysql

Facebook aime le suivi des notifications (DB Design)

Je ne sais pas si c'est la meilleure façon de le faire, mais comme je n'ai aucune idée de quelqu'un d'autre, c'est ce que je ferais. J'espère que cette réponse pourra également en aider d'autres.

Nous avons 2 tableaux

notification
-----------------
id (pk)
userid
notification_type (for complexity like notifications for pictures, videos, apps etc.)
notification
time


notificationsRead
--------------------
id (pk) (i dont think this field is required, anyways)
lasttime_read
userid

L'idée est de sélectionner les notifications dans la table des notifications et de rejoindre la table notificationsRead et de vérifier la dernière notification de lecture et les lignes avec ID> notificationid. Et chaque fois que la page des notifications est ouverte, mettez à jour la ligne de la table notificationsRead.

La requête pour les notifications non lues, je suppose, serait comme ça..

SELECT `userid`, `notification`, `time` from `notifications` `notificationsRead`
WHERE 
`notifications`.`userid` IN ( ... query to get a list of friends ...) 
AND 
(`notifications`.`time` > (
    SELECT `notificationsRead`.`lasttime_read` FROM `notificationsRead` 
    WHERE `notificationsRead`.`userid` = ...$userid...
))

La requête ci-dessus n'est pas cochée.Grâce à l'idée de db design de @espais