while循环中的第一个最新条目


Newest entry first in while loop

我正在用PHP构建一个PM系统,但我遇到了一个问题。每封邮件都存储在数据库中。此查询获取所有的邮件,这些邮件是您以身份登录时写给用户的

$getmails = "SELECT * FROM mail WHERE reciever='$drow[ID]'";

然后我有了这段代码,用来显示在列表中写给用户的每封邮件。

if ($getter->num_rows > 0) {
    while($mrow = $getter->fetch_assoc()) {
        // do something
    }
}

这个代码工作并显示邮件。问题是,他的代码显示了最新的邮件,位于列表的底部。顶部还有最古老的邮件。

每封邮件都有一个ID,我想把这些邮件先排序到最新的,就是在顶部的最低ID之后排序。

这里有人能帮助我实现这一点吗?提前感谢

完整代码:

<div class="mailbox">
<?php
    if ($getter->num_rows > 0) {
        while($mrow = $getter->fetch_assoc()) {
            if($mrow['seen'] == 0) {
                echo "<li><b>$mrow[titel]</b></li>";
            } else {
                echo "<li>$mrow[titel]</li>";
            }   
        }
    } else {
        echo "You have no mails";
    }
?>
</div> 

按日期对电子邮件进行排序,我希望您的表中有列create_date

$getmails = "SELECT * FROM mail WHERE reciever='$drow[ID]' ORDER BY create_date DESC";

或者使用ID,最新的应该是最高的:

$getmails = "SELECT * FROM mail WHERE reciever='$drow[ID]' ORDER BY id DESC";

使用ORDER BY命令并选择要排序的列名将是最简单的。

"SELECT * FROM mail WHERE receiver='$drow[ID]' ORDER BY date DESC"

我还建议在你的选择中包括"可见"值,以提高的效率

"SELECT * FROM mail WHERE receiver='$drow[ID]' and seen=0 ORDER BY date DESC"

您应该在查询末尾添加'ORDER BY column_DESC'。这将导致按特定顺序检索数据库信息。

DESC代表"DESCENDING"。

您的查询应该如下所示:

$getmails = "SELECT * FROM mail WHERE reciever='$drow[ID]' ORDER BY ID DESC";