私は通知システム (PHP、MySQL ベース) を持っており、次のことをしようとしています: クエリの通知結果は、投稿ごとに無制限にグループ化されますが、time_sent ごとに並べ替えられ、5 回に制限されます (反復ごと)。次に、ajax を使用して、5 つの通知の次の反復セットを表示しました。
基本的に、一度に (セットごとに) 5 つの通知が必要ですが、それぞれについて、グループが 1 つの投稿に関係している場合: 必要なだけ通知を行うことができます。
以下のように表示されます。
- ポスト F に関する通知 – 1 日前に送信
- 投稿 C に関する最初の通知 – 2 日前に送信
- 投稿 C に関する 2 回目の通知 – 3 日前に送信
- 投稿 C に関する 3 回目の通知 – 4 日前に送信
- 投稿 C に関する 4 回目の通知 – 5 日前に送信
- 投稿 Y に関する通知 – 3 日前に送信
- 投稿 D に関する最初の通知 – 4 日前に送信
- 投稿 D に関する 2 回目の通知 – 5 日前に送信
- 投稿 D に関する 3 回目の通知 – 6 日前に送信
- 投稿 Y に関する通知 – 5 日前に送信
投稿 Y に関する新しい通知が送信された場合、これは当然リストの一番上に表示されます。
これは、このグループシステムを実装することを決定する前に、私が始めた方法です:
$notifications_req = mysql_query('SELECT * FROM notifications WHERE user_id = "'.$user_id.'" ORDER BY time_sent DESC LIMIT 5');
そして今、私は道に迷い、このグループ化とロジックによる順序付けに苦労しています。
データベースにはもちろんpost_id
列が含まれています。
編集:
通知を並べ替える方法を大幅に変更することになりました。これが私が最終的にやった方法です。最も効率的ではないかもしれませんが、私が望むように動作します:
<?php $notifications_all_req = mysql_query('SELECT * FROM notifications WHERE user_id = "'.$user_id.'" ORDER BY time_sent DESC'); if(mysql_num_rows($notifications_all_req) > 0){
while($row = mysql_fetch_assoc($notifications_all_req))
{
$post_req_ids[] = $row['post_id'];
}
$unique_post_ids = array_unique($post_req_ids);
foreach ($unique_post_ids as $i => $unique_post_id)
{
?>
<ul id="notifications_ul_<?php echo $i; ?>">
<?php
$notifications_req = mysql_query('SELECT * FROM notifications WHERE (user_id = "'.$user_id.'" AND post_id = "'.$unique_post_id.'") ORDER BY time_sent DESC ');
while($notification = mysql_fetch_assoc($notifications_req))
{
}
?>
</ul>
<?php
} } ?>
$i
このようにして、通知グループ ( を使用) と各グループ内の通知グループの両方の制限を制御できます。また、後者のコードを Ajax でさらに読み込むこともできます。