0

アプリ用に mySQL データベースを設定する方法の最適なソリューションを探しています。

私のアプリは、「新しいお知らせ」と「見たお知らせ」の 2 つのセクションがある掲示板のように機能します。

ユーザーが通知を表示したときにボタンをクリックすると、[新規] から [既読] に移動します。しかし、この人だけに。

各ユーザーはすべての通知を表示できますが、必ずしも同じセクションにあるとは限りません。ユーザーは異なる時間にそれらを表示し、異なる時間に表示されたときにそれらをチェックするためです。

私の推測では、すべての通知に対して 1 つのテーブル「Notices」と、行「UserID」と「noticeID」を持つ「Seen」という別のテーブルがあります。これは、各通知について、表示するかどうかを確認するために「表示済み」テーブルを参照する必要があることを意味します。これは理想的ですか、それとも別の方法がありますか?

4

3 に答える 3

0

NoticeIDとUserIDのテーブルがあるので、閲覧日も追加します。

于 2012-10-18T04:26:52.567 に答える
0

3つのテーブルを使用できます

  1. ユーザー
  2. お知らせ
  3. SeenNotices(おそらく最高の名前ではありません)

SeenNoticesテーブルには、UserID、NoticesID、HaveSeenの3つの列があります。have HaveSeen列は、ユーザーがそれを見たかどうかを示します。

于 2012-10-18T04:29:23.717 に答える
0

あなたが考えている方法はうまくいくはずですが、時間が経つにつれて、スケーラブルではない非常に大きな「見られた」テーブルになってしまいます。簡単な代替手段は、代わりに「Unseen」テーブルを使用することです。このようにして、人々が通知を表示するにつれてテーブルが小さくなり、非常に古いエントリを削除することもできます (古い通知は関連性がなくなっている可能性があるため、ユーザーに非表示として表示されなくても問題ありません)。

「見えない」テーブルを使用すると、クエリは次のようになります。

SELECT n.notice_id, n.notice_msg, IF(u.user_id, 'new', 'seen') AS status
FROM notice n
LEFT JOIN unseen u ON (u.user_id = $user_id AND n.notice_id = u.notice_id)
WHERE user_id = $user_id;
于 2012-10-18T04:43:38.323 に答える