我有一个如下所示的数据库:
我目前使用以下查询来获取特定登录用户 (toid) 的消息列表
SELECT
photo,forename,surname,m.status,datetime,m.type,message,timestamp
FROM messages m
LEFT JOIN users ON users.userID = m.fromid
WHERE toid = '$userID' ORDER BY datetime DESC
然后我使用 foreach($messages as $m):
然后回显一些向用户显示消息的代码。
当前如屏幕截图所示,有来自同一 fromid 和 toid 的消息,并且当前会打印这两条消息。
我想知道是否有一种方法可以将它们分组并仅将其显示为一条消息,但显示最近收到的消息?
我的 php 循环代码
<?foreach ($messages as $m):?>
<li <?if ($m->status == "0"){?> class="unread" <?}?>>
<a href="dashboard-messages-conversation.html">
<div class="message-avatar"><img src="https://process.filestackapi.com/resize=width:960,height:960,fit:crop/<?echo $m->photo;?>" alt="" /></div>
<div class="message-by">
<div class="message-by-headline">
<h5><?echo $m->forename . " " . $m->surname;?> <?if ($m->status == "0"){?> <i>Unread</i><?}?></h5>
<span><? time_stamp($m->timestamp);?></span>
</div>
<p><?echo truncate($m->message, 100);?></p>
</div>
</a>
</li>
<?endforeach;?>
最佳答案
您可以使用相关子查询:
select m.*
from messages m
where m.timestamp = (select max(m2.timestamp)
from messages m2
where (m.toid, m.fromid) in ( (m2.toid, m2.fromid), (m2.fromid, m2.toid))
);
关于php - 如何对数据库查询中的所有对话(消息)进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56238611/