使用DISTINCT

时间:2015-10-26 12:57:37

标签: php mysql

我试图在我的网站中构建一个聊天插件,但是在收件箱中对收到的消息进行排序时遇到了问题。当我使用下面的代码时,它不会根据新发送的消息对消息进行排序,但是根据已发送消息的历史记录订单:

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/>";
}

?>

3 个答案:

答案 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排序消息