内容を閲覧後に表示を消すことができる通知機能を実装したい

投稿者: Anonymous

PHPで通知機能を作成しようとしています、ロジック面での質問です。

実装したい内容

  1. データベースに新規内容が登録されたら通知を表示(検索でなんとかなりそう)
  2. 通知から登録された内容が表示されている画面に遷移(ここまでは検索でなんとかなりそう)
  3. 一度遷移して、画面を閲覧したら通知が消えるようにしたい

この3はどういう考え方をすれば実装できるでしょうか?

追記
・通知はブラウザで表示したい
・閲覧済みのフィールド追加可能
・認証、ログイン機能を付けているので個々に対応したものに上記の通知機能を付けたい
 ログインはuser IDを自動で振り分けているのでそれを紐づける予定

調べた結果markAsReadとかも使えそうなのか、と思考を巡らせております。

解決

データベース(MySQL)を利用した通知機能です。
PHPだけではちょっと実装をできないのでご注意ください。

どのようなデータベースかはわかりませんが、
仮に以下のようなテーブルとデータがあったとします。

create table Customer(cus_id integer NOT NULL PRIMARY KEY, cus_name varchar(100));
create table News(news_id integer NOT NULL PRIMARY KEY, news_title varchar(100));
insert Customer SET cus_id = 1, cus_name = "須田区叔母風呂";
insert News SET news_id = 1, news_title = "バージョンアップのお知らせ";
insert News SET news_id = 2, news_title = "バージョンダウンのお知らせ";

そこに「顧客毎にニュースを閲覧履歴」テーブルを作ります。

create table CustomerMarkAsReadNews(cus_id integer NOT NULL, news_id integer NOT NULL, 
PRIMARY KEY(cus_id,news_id), FOREIGN KEY (cus_id) 
REFERENCES Customer(cus_id),FOREIGN KEY (news_id) 
REFERENCES News(news_id));

「須田区叔母風呂」が「バージョンアップのお知らせ」のNewsを開いたタイミングで「顧客毎にニュースを閲覧履歴」テーブルにデータを代入します

insert CustomerMarkAsReadNews SET cus_id = 1, news_id = 1;

通知機能ではNewsを取得するときに「顧客毎にニュースを閲覧履歴」と結合します。
条件としては
ログインしている「須田区叔母風呂」の「顧客毎にニュースを閲覧履歴」のデータがないNews

SELECT * FROM News
LEFT JOIN CustomerMarkAsReadNews
 ON News.news_id = CustomerMarkAsReadNews.news_id 
 AND     CustomerMarkAsReadNews.cus_id = 1
WHERE CustomerMarkAsReadNews.news_id is Null;

PHPで利用しているフレームワークやライブラリがわからないのでデータとのやり取りだけを記載させていただきました。

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *