MysQl从同一用户一起分组数据

时间:2017-05-16 16:37:23

标签: mysql group-by max

我试图解决一个问题,我很确定可以通过简单的查询来解决这个问题我无法弄清楚。这是表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> 

1 个答案:

答案 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以翻转它。