在while循环中只回显一次mysql数据

时间:2014-08-05 12:09:39

标签: php mysql while-loop

我设法进行了一次php聊天,其中每条消息在我的数据库表中都有一行,user_from列当然会多次相同。现在我想回显发送给登录用户或从登录用户发送的最新消息。我只能通过使用此代码来回显每条消息。

 <?php

  $select = mysql_query("SELECT * FROM privat_mess WHERE userid_to='$idn' OR      
  userid='$idn' ORDER BY identitet DESC");

 while($row = mysql_fetch_assoc($select)){
     $id = $row['identitet'];
     $userid = $row['userid'];
     $userid_to = $row['userid_to'];
     $user_from = $row['user_from'];
     $user_to = $row['user_to'];
     $msg_body = $row['msg_body'];
     $opened = $row['opened'];


    if($userid == $idn) {
    echo '<div class>
        <p><strong>'.$user_to.'</strong></p>
            '.$msg_body.'
    </div>';
    }
else{
        echo '<div>
        <p><strong>'.$user_from.'</strong></p>
          '.$msg_body.'

    </div>';
}

}

?>

$ userid是发送邮件的用户的users表中的$ id,       $ idn是登录用户的ID。

我确定可以以某种方式使用unique_array(),但如果有人能告诉我如何或有更好的方法,我会非常感激。我也尝试使用DISTINCT,但我无法正常使用它。

我想要像facebook上的消息一样,其中一个是最新的活跃聊天。如果按下它,您将进入该聊天

编辑:

     $id = A_I, primary Key, the message id 
     $userid = the id for the user that sent the message 
     $userid_to = the id for the user that got the message 
     $user_from = name for the user who sent the message
     $user_to = name for the user who got the message
     $msg_body = The message text

我想显示每个聊天的最新消息。

通过一次聊天我的意思是$ userid和$ user_from是唯一的。如果同一个用户发送了更多消息,我也不希望他们显示这些消息。

2 个答案:

答案 0 :(得分:0)

从您的评论中但我希望每个用户发送一条消息,而不是一条消息

试试这个:

SELECT 
     * 
FROM 
     privat_mess 
WHERE 
     userid_to='$idn' 
OR      
     userid='$idn' 
GROUP BY 
     userid
ORDER BY 
     identitet DESC

答案 1 :(得分:-1)

$select = mysql_query("SELECT * FROM privat_mess WHERE userid_to='$idn' OR      
                       userid='$idn' ORDER BY identitet DESC limit 0,1");

只能获得1条记录,第一条记录。我想你读了一两分钟,因为它可以加快你的查询速度!

编辑:

好吧,如果你只想要一个解决方案,而不是一个花哨的解决方案(当我下班回家时感觉我离开了我的大脑),只需取出你想要的标识,然后重新查询每一个:

SELECT 
      max(identitet), userid_from
FROM 
     privat_mess 
WHERE
     userid_to='$idn' OR userid='$idn'
GROUP BY userid_from

您将获得每个聊天的最新鲜的身份,并可以循环每个聊天以获得有关每个聊天的更多信息。

如果你想从一开始就通过sql解决它我有另一种方式,但它不漂亮(不要在大数据库上使用它!):

 SELECT * 
 FROM privat_mess 
 WHERE (userid_to='$idn' OR userid='$idn') AND 
 identitet IN (SELECT max(identitet) 
               FROM privat_mess
               WHERE userid_to='$idn' OR userid='$idn' 
               GROUP BY userid_from)