Php 将字段中具有相同值的连续通知分组

Php 将字段中具有相同值的连续通知分组,php,mysql,Php,Mysql,如何对“类型”和“消息id”列中具有相同值且连续的通知进行分组? 我的“通知”表的结构如下: [id |作者|日期时间|类型|消息| id |通知|收件人] 我试过使用groupby函数,但这会对所有记录进行分组,而不仅仅是那些彼此连续的记录 现在我只有一个简单的查询,因为使用groupby我什么都没有做到: $notifications = mysql_query("SELECT * FROM notifications WHERE notification_to = '$session_ro

如何对“类型”和“消息id”列中具有相同值且连续的通知进行分组?
我的“通知”表的结构如下:

[id |作者|日期时间|类型|消息| id |通知|收件人]

我试过使用
groupby
函数,但这会对所有记录进行分组,而不仅仅是那些彼此连续的记录


现在我只有一个简单的查询,因为使用
groupby
我什么都没有做到:

$notifications = mysql_query("SELECT * FROM notifications WHERE notification_to = '$session_row_id' ORDER BY id DESC LIMIT 20", $connection);
并列出记录:

while($rows = mysql_fetch_array($notifications)) { ... }
这就是我现在拥有的:

USER1 followed you
USER2 followed you
USER3 shared your message[ID:10]
USER4 followed you
USER5 shared your message[ID:20]
USER6 shared your message[ID:20]
USER7 shared your message[ID:30]
我想得到的是:

USER1 and 1 more followed you
USER3 shared your message[ID:10]
USER4 followed you
USER5 and 1 more shared your message[ID:20]
USER7 shared your message[ID:30]
与Twitter通知类似:

我们获取所有通知,并使用PHP对它们进行分组(这样更容易)。我们检查我们处理的最后一个通知是否与当前通知相同,如果相同,我们将在用户数量中添加一个通知。否则,我们将创建一个新通知,并将其链接到最后一个通知上


之后,我们只需回显我们的通知,检查是否有超过1个用户。。。我只是简单地回显了类型,因为您没有告诉我们应该使用什么变量或什么意思。

我认为您也应该将这个问题标记为sql或mysql,并向我们展示一些代码,您尝试了什么?你在期待什么?你得到了什么。。现在我所能做的只是一个简单的查询,因为使用GROUPBY我什么都没做。我有这样一个:$notifications=mysql_query(“选择*从通知,其中notification_to='$session_row_id'按id顺序描述限制20“,$connection”);列出记录:while($rows=mysql\u fetch\u array($notifications)){…}你说的“组”是什么意思?是否要将它们分组在阵列中?你能给我们展示一个数据的例子,以及你希望最终的结构是什么样子的吗?非常感谢!我刚刚测试了你的代码,它似乎工作正常。它工作得很完美。现在如何显示已分组的所有作者?现在只有最后一个,我也想给其他人看。你从来没有说过你想给其他人看。。。你应该把它们添加到“其他人”或其他什么的列表中,然后使用它们。很抱歉,我没有很好地解释我自己。我需要其他用户显示他们的个人资料图片。我已经有了。首先,我将每个用户名添加到
$grouped\u authors
变量中,并用逗号分隔。然后我用
explode(',',$grouped\u authors)
创建数组,最后我用
foreach
对数组的每个元素应用一个函数。
$notifications = mysql_query("SELECT * FROM notifications WHERE notification_to = '$session_row_id' ORDER BY id DESC LIMIT 20", $connection);

$last_notification = false;
$grouped_notifications = array();
while($row = mysql_fetch_array($notifications)) {
    if($last_notification && $row['message_id'] == $last_notification['message_id'] && $row['type'] == $last_notification['type']){
        $last_notification['plus']++;
    }else{
        $row['plus'] = 0;
        $grouped_notifications[] = $row;
        $last_notification = &$grouped_notifications[count($grouped_notifications)-1];
    }
}

foreach($grouped_notifications as $notification){
    echo $notification['author'];
    if($notification['plus']>0){
        echo ' and '.$notification['plus'].' more';
    }
    echo ' has '.$notification['type'];
}