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