我设法进行了一次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是唯一的。如果同一个用户发送了更多消息,我也不希望他们显示这些消息。
答案 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)