2

コメントに通知を実装しようとしています。つまり、投稿にコメントし、別のユーザーが同じ投稿にコメントすると、通知が届きます。このクエリを使用して投稿所有者への通知を処理しました

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

通知表

上の表で、owner_idは投稿の所有者、 は投稿にuser_id2コメントした人です。

ID 17 のユーザーに、2 人 (ユーザー ID 2 と 1) も投稿にコメントしたことを伝えるにはどうすればよいですか?

2 番目のテーブルを使用する必要がある場合は、構造をどのようにすべきか教えてください。ありがとう

4

3 に答える 3

3

次のクエリは、コメントしたユーザーを取得します

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

しかし、あなたは現在投稿している人に通知したくないので...

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

それとも私は何かが足りないのですか?

于 2012-04-11T11:09:57.307 に答える
1

投稿とコメントを1対多の関係を持つ別々のテーブルに分けることをお勧めします

投稿{id、user_id、content、date}

コメント{id、post_id、user_id、comment、date}

次に、タイムアウトajax呼び出しを介してコメントをポーリングするだけです。自分ではないuser_idによってコメントが追加された場合は、ページに通知を挿入します。

于 2012-04-11T11:09:23.160 に答える
0

私が作成したこのクラスは、詳細を提供します。メソッド「notify_chain」で必要なことは完了しました。他の関数を確認する必要があるため、クラス全体をここに投稿します。

<?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();

?>

それが役立つことを願っています。問題がある場合は、facebook で maestrojosiah PG をチェックしてください。

于 2016-06-09T04:00:57.407 に答える