Php 从MySQL中选择数据不相同的行

Php 从MySQL中选择数据不相同的行,php,mysql,sql,Php,Mysql,Sql,所以我有一个聊天系统和一个带有通知的顶栏 我想做的是加载来自用户聊天的最后X个人的最后一条消息 因此,我不想垃圾邮件的通知与X数量的邮件来自同一个人,但我想加载最后一封邮件从X数量的人 下面是我的问题(示例): 想象一下,如果一个人向用户发送了8条消息,而我将消息查询限制为8个结果。该查询将返回来自同一个人的8条消息,但我制作了一个PHP过滤器,它将只回显来自一个人的1条消息。因此,基本上这只会回显一个人的一条消息,但不会回显任何其他人的任何其他消息,因为我将结果查询限制为8条,而该用户已经发送

所以我有一个聊天系统和一个带有通知的顶栏 我想做的是加载来自用户聊天的最后X个人的最后一条消息 因此,我不想垃圾邮件的通知与X数量的邮件来自同一个人,但我想加载最后一封邮件从X数量的人

下面是我的问题(示例): 想象一下,如果一个人向用户发送了8条消息,而我将消息查询限制为8个结果。该查询将返回来自同一个人的8条消息,但我制作了一个PHP过滤器,它将只回显来自一个人的1条消息。因此,基本上这只会回显一个人的一条消息,但不会回显任何其他人的任何其他消息,因为我将结果查询限制为8条,而该用户已经发送了8条消息

这是我的PHP过滤器(但我想用SQL实现)

foreach($sideMess作为$smes){
如果(!isset($showedList[$smes['id']]){
回声'
“,$smes['firstname'],”,$smes['lastname'],'
';
$showedList[$smes['id']]=true;
$cS++;
}
}

根据您的规范,您似乎需要来自多个用户的最后一条消息的列表,即用户提示的最后一条消息

select * from
(select * from
messages
order by user_id,message_time desc) temp
group by user_id;
好了,问题解决了! 我在下订单之前使用了GROUP BY sender_id
谢谢你的帮助

向我们展示数据库模式和您使用的查询。因此,如果您限制为
X=3
,并且只有一个人发布5条消息。您想要最后3封邮件还是只想要1封(最新的)。如果两个人发布了5条相同的消息,只需提交用户进行分组。
选择用户,最大(消息时间)作为消息的最后一条消息,其中receiver=\u和message\u time>now()-间隔3天,按用户分组,按最后一条消息描述限制8
给用户,我们不知道你的数据库模式,但基本上,你可以通过在末尾添加
GROUP by submittinginguser LIMIT X
来查询X个用户最近的消息。你说的“temp”是什么意思?为什么选择2次?@Champa:我需要特定顺序的数据
temp
只是运行时内存/临时表。查询是否提供了所需的输出。。?
select * from
(select * from
messages
order by user_id,message_time desc) temp
group by user_id;