2

情報

現在、それぞれの通知に関する情報を含む、ログインしているユーザーのすべての通知を一覧表示する通知ページを作成しています。

たとえば、情報なしで

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
4

1 に答える 1