2012-05-11 2 views
17

Je travaille actuellement sur une application mobile qui vous permet de demander à vos amis pour les favoris, c'est une interface HTML5 et un backend PHP. Je suis bloqué quant à la meilleure façon de construire un système de notifications, plus-le schéma de la base de données que le code lui-même.Meilleure façon de construire un système multi-notifications en PHP

Le flux d'applications mobiles est la suivante:

  • Un utilisateur vous demande une faveur
  • L'utilisateur peut choisir; informer tous les amis, informer vos amis préférés ou notifdy amis proches
  • Selon ce que l'utilisateur a choisi, les gens sont informés

Quelle est la meilleure façon de le faire en PHP et MySQL? Je ne demande pas vraiment à qui que ce soit de m'écrire le code PHP, mais plutôt de tracer le schéma de table et de champs MySQL le plus idéal à la place car c'est ce sur quoi je suis actuellement bloqué. Merci d'avance pour votre aide.

Répondre

29

Vous pouvez créer une table de notification telle que:

from_user | to_user | notification | seen 

et chaque fois que vous voulez informer un utilisateur que vous venez d'ajouter un enregistrement avec les informations nécessaires et définissez seen-0/false.

Ensuite, lorsque l'utilisateur lit la notification, vous définissez ce paramètre sur 1/true.

Exemple:

from_user | to_user | notification | seen 
    -   -   -   - 

utilisateur john avertir l'utilisateur jeff:

from_user | to_user | notification | seen 
    john  jeff  whatever.. 0 

utilisateur jeff lire la notification:

from_user | to_user | notification | seen 
    john  jeff  whatever.. 1 
+0

Donc, fondamentalement, si l'utilisateur choisit d'aviser ses amis favoris, je ferais d'abord une requête pour obtenir les ID utilisateur des favoris actuels, puis je ferais une insertion en bloc dans une table de notifications pour chacun de ces ID. Cela semble assez logique. Quelque chose comme ça m'a traversé l'esprit à l'origine, mais je pensais qu'il y avait peut-être un autre moyen. Cela semble être la chose logique à faire. –

+0

@Dwayne, ouais. Ou vous pourriez faire une sous-requête (http://dev.mysql.com/doc/refman/5.5/en/subqueries.html). En tout cas, cela semble la façon la plus logique et la plus propre de le faire. Je voudrais également supprimer toutes les notifications vues qui sont plus vieux que 7-14 jours pour optimiser tout, mais c'est à vous de décider. – Shoe

+2

Une approche simple mais fiable +1 –

4

Pourquoi ne pas citer que toutes les notifications dans une table appelée "notifications"

id | user_id | from_user_id | notification 
  • id = id notification
  • user_id = qui est la notification pour?
  • from_user_id = qui a envoyé la notification?
  • notification = le message

Puis, comme pseudo-code:

// Create a notification from User A to User B 
$this->db->insert ('notifications', array ('user_id' => $friends_id, 'from_user_id' => $current_user_id, 'notification' => $message)); 

// The meanwhile, on your home page or somewhere, wherever you want to display notifications 
$this->db->where ('user_id', $current_user_id) 
$notifications = $this->db->get ('user_id'); 
foreach ($notifications as $notification) 
{ 
     // Display the notification as needed 
     // Optionally delete the notification as it is displayed if it is a "one off" alert only 
} 
+0

Merci de répondre à mate. Je suis allé avec la réponse de Jeffrey lorsqu'il a posté le premier, mais je vous remercie d'avoir pris le temps de répondre, alors j'ai voté pour vous. –

4

Extension Réponse de Jeffrey:

id | from_user | to_user | notification | seen | timestamp 
-   -   -   -   -   - 
horodatage

vous aidera à identifier à quel moment une notification particulière a eu lieu. Vous pouvez également créer un moment de temps en étendant votre script avec timeago.js ou Livestamp.js

Il vous aidera également à créer un calendrier de notification et la maintenance de la notification serait plus simple.

Questions connexes