情報
現在、それぞれの通知に関する情報を含む、ログインしているユーザーのすべての通知を一覧表示する通知ページを作成しています。
たとえば、情報なしで
You have an unread message
情報あり
<Sarah> Sent you an message
問題
通知にはユーザー名 (メッセージ通知用) や記事のタイトル (著者をフォローしていて、新しいブログ投稿をリリースしたとします) などのデータが必要なため、1 つの通知でユーザー名からユーザー テーブルを取得し、次にブログのタイトルを取得する必要があります。ブログテーブル) これにより、ローカルホストでもページが遅れます。これは、アップロードして実際にテストすると、大幅に悪化すると思います。
現在のコード
function showNotifications($userid){
$STH = $this->database->prepare('SELECT * FROM notifications WHERE user_id = :userid ORDER BY timestamp DESC');
$STH->execute(array(':userid' => $userid));
while($row = $STH->fetch(PDO::FETCH_ASSOC)){
$this->sortNotif($row);
}
さまざまな種類の通知があるため、以下の機能について簡単に説明します。たとえば、タイプ 1 = 新しいメッセージ、タイプ 2 = 新しいブログ投稿など、特定のタイプの ID を作成しました。
function sortNotif($notif){
switch ($notif['type']) {
case "1":
$msg = $this->getMessageData($notif['feature_id']);
$user = $this->userData($msg['sender']);
echo '<li><i>'.timeAgo($notif['timestamp']).'</i><a href="user.php?username='.$user['username'].'">'.$user['first_name'].'</a> sent you a <a href="inbox.php?message='.$msg['id'].'">message</a></li>';
break;
}
}
ユーザーが新しいメッセージを持っていることを示すだけでわかるように、2 つのクエリが作成され、40 ほどの通知がループされると、100 を超えるユーザーがサーバーに負担をかけます。
最後の言葉
さらに詳しい情報が必要な場合は、お問い合わせください。この質問をできるだけ早く更新します。ありがとうございます。
編集
以下は、以下のコメントで要求されたテーブル構造です。
通知
id | user_id | feature_id | type | timestamp | read
ユーザー
id | username | password | first_name | last_name | email | verify_hash | avatar | type
メッセージ
id | receiver | sender | replying_to | deleted | body | timestamp | read