2012-04-11 18 views
2

Ich versuche, Benachrichtigungen über Kommentare zu implementieren, das heißt - wenn ich einen Beitrag kommentiere und ein anderer Benutzer Kommentare zum selben Beitrag, bekomme ich eine Benachrichtigung. Ich habe die Benachrichtigung für den Posten Eigentümer behandelt mit dieser AbfrageWie man eine Kommentarbenachrichtigung implementiert?

SELECT id, owner_id, post_id, user_id2, COUNT(user_id2) AS num, type, UNIX_TIMESTAMP(date_done) AS date 
FROM notification 
WHERE owner_id = '$user_id' AND user_id2 != '$user_id' 
ORDER BY date_done DESC 

notification table

In der obigen Tabelle owner_id die Person ist, die die Post besitzt, sind die user_id2 diejenigen, die auf der Post kommentiert.

Wie kann ich dem Benutzer mit ID 17 mitteilen, dass zwei Personen (mit Benutzer-ID 2 und 1) auch den Beitrag kommentiert haben?

Wenn ich eine zweite Tabelle verwenden soll, bitte sagen Sie mir, wie die Struktur sein sollte. Dank

+0

Sie brauchen etwas, um den Beitrag zu identifizieren, nicht wahr? Die Abfrage, die Sie oben eingefügt haben, wählt nur aus der Datenbank nach user_id aus. – Pete

+0

Woher wissen Sie, dass Benachrichtigungen gelesen werden und nicht mehr angezeigt werden? – safarov

+0

@Pete, der Post hat bereits eine eindeutige ID. Die Abfrage, die ich gepostet habe, ist jetzt nicht wirklich die Herausforderung, sondern die Abfrage zum Senden einer Benachrichtigung an andere Benutzer, die den gleichen Beitrag kommentiert haben. – Chibuzo

Antwort

1

Ich schlage vor, Beiträge und Kommentare in separaten Tabellen mit einer Eins-zu viele Beziehung

Post { id, user_id, Inhalt, Datum }

Kommentar { id, post_id Trennung , user_id, Kommentar, Datum }

Dann können Sie Ihre Kommentare einfach über einen Timeout-Ajax-Anruf abrufen. Wenn Kommentare von einer user_id hinzugefügt wurden, die nicht Ihre ist, fügen Sie eine Benachrichtigung in die Seite ein.

+0

Der Beitrag und die Kommentare haben jeweils eine Tabelle, so wie Sie es vorgeschlagen haben. Ich möchte, dass andere Benutzer, die Kommentare zu dem Post verfassen, auch eine Benachrichtigung erhalten, nicht nur den Postbesitzer. – Chibuzo

+0

Sicher, wenn jeder Benutzer auf der Post-Seite ist, fragen Sie nach Kommentaren für diesen Beitrag. Und wenn es welche gibt, injizieren Sie eine Benachrichtigung. –

+0

Ich verstehe Ihren Standpunkt, aber die Situation ist, dass ich möchte, dass die Benutzer die Benachrichtigungen auf ihrer Benutzerseite und dann einen Link zur Post-Seite erhalten. Danke trotzdem. – Chibuzo

2

Die folgende Abfrage wird dem Benutzer (n), die

SELECT DISTINCT user_id2 
FROM notification 
WHERE post_id = '$post_id' 

kommentiert haben, aber Sie wollen nicht so ...

SELECT DISTINCT user_id2 
FROM notification 
WHERE post_id = '$post_id' 
AND user_id2 != '$user_id' 

veröffentlichen die Person zur Zeit informieren, oder bin ich fehlt etwas?

0

Diese Klasse, die ich erstellt habe, gibt Ihnen das Detail. Ich habe getan, was Sie mit der Methode 'notify_chain' machen müssen. Sie müssen die anderen Funktionen sehen, also werde ich die ganze Klasse für Sie hier veröffentlichen.

<?php 


class Notification extends DatabaseObject{ 

public $id; 
public $type; 
public $post_id; 
public $owner_id; 
public $user_id2; 
public $date_done; 
public $read_or_not; 
public $notifications; 
public $message; 
public $count; 

protected static $table_name="notifier"; 
protected static $db_fields = array('id', 'type', 'post_id', 'owner_id', 'user_id2', 'date_done', 'read_or_not'); 


public function check_notification(){ 
    global $database; 
    global $session; 
    if($session->is_logged_in()) { 
    $id=$session->user_id; 

    $sql = "SELECT * FROM notifier WHERE owner_id={$id} AND read_or_not = 0"; 
    $chk = $database->query($sql); 
    if(!empty($chk)){ 
     while($notifs = $database->fetch_assoc($chk)){ 
      $message=""; 
     $this->notifications[] = $notifs; 
     $this->id       = $notifs['id']; 
     $this->type       = $notifs['type']; 
     $this->post_id     = $notifs['post_id']; 
     $this->owner_id     = $notifs['owner_id']; 
     $this->user_id2     = $notifs['user_id2']; 
     $this->date_done    = $notifs['date_done']; 
     $this->read_or_not   = $notifs['read_or_not']; 
      foreach($notifs as $notif){ 
       $user=Member::get_name($this->user_id2, false); 
       if($this->type=="comment"){ 
        $message = "<a href='post.php?post=".$this->post_id."&ntf_clr=".$this->post_id."'>".$user." commented on your post.</a>"; 
       } elseif($this->type=="reply"){ 
        $message = "<a href='comment_reply.php?c_id=".$this->post_id."&ntf_clr=".$this->post_id."&cmt=Comment&rpl=CommentReply'>".$user." replied to your comment.</a>"; 
       } elseif($this->type=="discussion_comment"){ 
        $message = "<a href='discussion.php?discussion=".$this->post_id."&ntf_clr=".$this->post_id."&cmt=Comment&rpl=CommentReply'>".$user." Commented on your discussion.</a>"; 
       } elseif($this->type=="discussion_reply"){ 
        $message = "<a href='comment_reply.php?c_id=".$this->post_id."&ntf_clr=".$this->post_id."&cmt=Comment&rpl=CommentReply'>".$user." replied to your discussion comment.</a>"; 
       } elseif($this->type=="article_comment"){ 
        $message = "<a href='article.php?article=".$this->post_id."&ntf_clr=".$this->post_id."'>".$user." Commented on your article.</a>"; 
       } elseif($this->type=="article_reply"){ 
        $message = "<a href='comment_reply.php?c_id=".$this->post_id."&ntf_clr=".$this->post_id."&cmt=ArticleComment&rpl=ArticleCommentReply'>".$user." replied to your article comment.</a>"; 
       } elseif($this->type=="chain_comment"){ 
        $message = "<a href='post.php?post=".$this->post_id."&ntf_clr=".$this->post_id."'>".$user." also commented to a post.</a>"; 
       } elseif($this->type=="chain_reply"){ 
        $message = "<a href='comment_reply.php?c_id=".$this->post_id."&ntf_clr=".$this->post_id."&cmt=Comment&rpl=CommentReply'>".$user." also replied to a comment.</a>"; 
       } 
      } 
      $this->message = $message_array[] = $message; 
     } if(isset($message_array)){return $message_array;}   
     } else{ 
      return false; 
     } 
     } 
     } 

     public static function mark_as_seen($notif_id){ 
      global $database; 
      global $session; 
      $me = $session->user_id; 
      $sql = "UPDATE `notifier` SET read_or_not=1 WHERE owner_id = {$me} AND post_id={$notif_id}"; 
      $clear_notification = $database->query($sql); 
     } 

     public static function make_notification($post_id, $owner_id, $user_id2, $type="comment"){ 
      $notif = new Notification(); 
      $notif->type=$type; 
      $notif->post_id=$post_id; 
      $notif->owner_id=$owner_id; 
      $notif->user_id2=$user_id2; 
      $notif->date_done=strftime("%Y-%m-%d %H:%M:%S", time()); 
      $notif->read_or_not=0; 
       $notif->create(); 
     } 


     public static function notif_count($id){ 
     global $database; 
     $notif_cnt = $database->query("SELECT COUNT(*) as notifs FROM notifier WHERE owner_id={$id} AND read_or_not = 0"); 
     $data=$database->fetch_array($notif_cnt); 
     return $data['notifs']; 
     }   

     public static function notify_chain($post_id, $user_id2, $type="chain_comment"){ 
     global $database; 
     global $session; 
      $sql = "SELECT DISTINCT user_id2 "; 
      $sql .= "FROM notifier "; 
      $sql .= "WHERE post_id = {$post_id} "; 
      $sql .= "AND user_id2 != {$session->user_id} "; 
      $chain = $database->query($sql); 
     while ($users = $database->fetch_assoc($chain)){ 
      $list = ""; 
      foreach ($users as $user){ 
       Notification::make_notification($post_id, $user, $user_id2, $type="chain_comment"); 
       $list = $user; 
      } 
      $list_array[] = $list; 
     } return $list_array; 

     } 

} 

$notif = new Notification(); 

?> 

Ich hoffe, dass das hilft. check out maestrojosiah PG auf Facebook, wenn Sie irgendwelche Probleme haben.

Verwandte Themen