Php 使用DISTINCT对SQL数据进行排序

Php 使用DISTINCT对SQL数据进行排序,php,mysql,Php,Mysql,我试图在我的网站上建立一个聊天插件,但在对收件箱中收到的消息进行排序时遇到了问题。当我使用下面的代码时,它不会根据新发送的消息对消息进行排序,而是根据已发送消息的历史记录进行排序: 例如,如果我先向“A”发送消息,然后再向“B”发送消息,最后向“C”发送消息,那么到目前为止,我的代码工作正常。它显示C在顶部,B在中间,A在末端。但是,当我再次向B发送消息时,“B”不会出现在顶部 编辑: 有人把这个问题标记为重复问题。关于那个问题的问题有点不同。我已经提取了唯一的行(如该问题所问),但我无法根据时

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

例如,如果我先向“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/>";
}

?>

您是按未选择的列排序的

如果您想按
时间下单
我想您应该选择此栏: 试一试


按不需要区分的分组

不要按时间对邮件排序。
最佳做法是在
message
表中具有唯一的自动递增
id
列,并按其id对消息进行排序。对于消息,您可以选择按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
您可以获得如下发件人列表:

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

我甚至试过使用你说的ID,但也没用。你到底想要什么?要获取按时间排序的邮件列表或按时间排序的发件人列表?我希望获取按时间排序的邮件列表,并且发件人名称不会重复。由于您是按发件人分组的,我怀疑不需要DISTINCT子句。您的SQL语法中有错误;查看与MySQL服务器版本对应的手册,了解第2行“groupby
from
”附近使用的正确语法