我有一个通知系统(基于 PHP、MySQL),我正在尝试执行以下操作:查询按帖子分组的通知结果,没有任何限制,但按 time_sent 排序,限制为 5(每次迭代)。然后我使用 ajax 来显示下一个迭代集 5 个通知。
基本上我一次需要 5 个通知(每组),但是对于每个通知,如果一个组涉及一个帖子:可以有尽可能多的通知:
这将是如何显示的:
- 关于帖子 F 的通知 – 1 天前发送
- 关于帖子 C 的第一次通知 – 2 天前发送
- 关于帖子 C 的第二次通知 – 3 天前发送
- 关于 C 帖子的第三次通知 – 4 天前发送
- 关于 C 帖子的第四次通知 – 5 天前发送
- 关于帖子 Y 的通知 – 3 天前发送
- 关于 D 后的第一次通知 – 4 天前发送
- 关于 D 后的第二次通知 – 5 天前发送
- 关于 D 后的第三次通知 – 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 为后者加载更多代码。