我试图解决一个问题,我很确定可以通过简单的查询来解决这个问题我无法弄清楚。这是表ve_messages:
MessageID | RecieverID | SenderID | Message | SentOn
我使用while语句来显示消息并创建动态引导面板,但每次用户收到消息时,下面的查询将生成一个面板。我试图在一个面板中收集来自同一用户的所有消息,以便用户可以查看已发送的所有消息,以便他们可以跟踪对话。我怎样才能做到这一点?我尝试了GROUP BY SenderID
,但后来我无法访问所有消息...
<div class="panel-group" id="accordion">
<?php
$i=1;
$inboxmsgQ="SELECT * FROM ve_messages m JOIN ve_users u ON m.SenderID=u.UserID WHERE m.RecieverID= '$loginid_session' ";
$inboxmsgresult=mysqli_query($db,$inboxmsgQ);
while($inbox=mysqli_fetch_array($inboxmsgresult)){$i++?>
<?php
$checkavatareview=mysqli_query($db,"SELECT * FROM ve_photos p WHERE p.UserID={$inbox['SenderID']} AND IsPrimaryPhoto='1' ORDER BY InsertDate LIMIT 1");
$rowviewe = mysqli_fetch_array($checkavatareview,MYSQLI_ASSOC);
?>
<div class="panel panel-default">
<div class="panel-heading">
<h4 class="panel-title">
<a data-toggle="collapse" data-parent="#accordion" href="#collapseM<?=$i;?>"><?=$inbox['ProfileName'];?> | <?=$inbox['SentOn'];?></a>
</h4>
</div>
<div id="collapseM<?=$i;?>" class="panel-collapse collapse">
<div class="panel-body">
<a href="profile.php?viewuserprofile=<?=$inbox['SenderID'];?>" >
<?php if(mysqli_num_rows( $checkavatareview)==0):?>
<img style="width: 15% !important;" class="tableimg" src="uploads/nophoto.png" alt="profilename">
<?php elseif(mysqli_num_rows( $checkavatareview)>0):?>
<img style="width: 15% !important;" class="tableimg" src="core/<?=$rowviewe['PhotoPath'];?>" alt="profilename">
<?php endif;?>
</a>
<hr>
<?=$inbox['Message'];?>
</div>
</div>
</div>
<?php };?>
</div>
答案 0 :(得分:0)
为了让当前用户收到消息的所有人(为便于阅读而分成多行 - 您可以将其放在代码中的一行):
SELECT SenderID, ProfileName
FROM ve_messages m JOIN ve_users u ON m.SenderID=u.UserID
WHERE m.RecieverID= '$loginid_session'
GROUP BY UserId, ProfileName
;
循环浏览这些结果以创建面板。
您需要在每个面板中使用第二个循环来显示每条消息,并使用此查询的结果:
SELECT *
FROM ve_messages m JOIN ve_users u ON m.SenderID=u.UserID
WHERE m.RecieverID= '$loginid_session'
AND m.SenderID = {$inbox['SenderID']}
ORDER BY SentOn DESC
;
您可能实际上想要更改$inbox
关联数组的名称,因为它现在只有发件人的ID和配置文件名称。
ORDER BY
假设您希望最新消息位于顶部;将DESC
更改为ASC
以翻转它。