我试图在我的网站中构建一个聊天插件,但是在收件箱中对收到的消息进行排序时遇到了问题。当我使用下面的代码时,它不会根据新发送的消息对消息进行排序,但是根据已发送消息的历史记录订单:
E.g。如果我发送消息给" A"起初," B"之后和" C"最后,我在这里工作的代码很好。它显示C在顶部,B在中间,A显示在结尾。但当我再次向B发送消息时," B"不会出现在顶部。
修改 有人将此问题标记为重复。关于这个问题的问题是不同的。我已经确实提取了唯一的行(按照该问题的要求),但我无法根据时间对其进行排序。
这是我使用的代码,请忽略我在这里使用的mysql_ *标签。它只是用于测试。
<?php
$sql = mysql_query("SELECT DISTINCT `from` FROM `message` WHERE `to`='$username' ORDER BY `time` DESC");
// using loop
while($row = mysql_fetch_assoc($sql)){
echo $row['from'];
echo "<br/>";
}
?>
答案 0 :(得分:1)
您是按未选择的列
进行排序如果您想按time
订购,我认为您应该选择此列:
试试
$sql = mysql_query("SELECT `from` , max(`time`) FROM `message`
WHERE `to`='$username' GROUP BY `from` ORDER BY `time` DESC " );
分组不需要明确的
答案 1 :(得分:1)
对于消息,您可以选择id desc排序的行,如下所示:
SELECT * FROM `message` WHERE `to`='username' ORDER BY id DESC
发件人名单你可以这样:
SELECT MAX(`id`),`from` FROM `message` WHERE `to`='username' GROUP BY `from` ORDER BY MAX(`id`) DESC
答案 2 :(得分:0)
不要按时间订购邮件。
最佳做法是在id
表中添加唯一的自动增量message
列,并按照他们的ID排序消息