0

我正在使用数据库进行聊天。当我显示消息时,旧消息位于顶部,新消息位于底部。我怎样才能做到这一点,以便新消息排在首位。我已经尝试过,ORDER BY Username DESC但这只是让它按字母顺序排列。

这是我的完整代码

<html>
<head>
    <title>Jetup</title>
</head>
<body>
<form name="chatform" action="<?php echo $_SERVER['PHP_SELF']?>" method="post">
    <input type="text" name="chatuser"/>
<input type="text" name="chatinput"/>
<input type="image" name="send" value="Verzenden"/>
<br/>
<?php
    $connection = mysql_connect("localhost","root","usbw") or die ("Kon geen verbinding maken");
    mysql_select_db("chat") or die("Kan geen database selecteren");

    if(isset($_POST['chatinput']) && isset($_POST['chatuser'])){
        $input = $_POST['chatinput'];
        $user = $_POST['chatuser'];


        $query = "INSERT INTO chatterdata (Username, Message) VALUES ('".$user."', '" .$input."')";
        mysql_query($query) or die(mysql_error());
    }
    $display = mysql_query("SELECT * FROM chatterdata ORDER BY Username DESC, Message DESC");
    while($row = mysql_fetch_array($display)){
        echo($row['Username'] . " : " .$row['Message'] . "<br/>");
    }
?>
</form>
</body>

4

2 回答 2

1

您应该在您的 chatterdata 表中添加一个时间戳字段。

然后您可以按此字段订购

`added` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

这是一个示例字段,当您添加新消息时将自动更新,因此您无需在创建消息时向数据库中插入任何其他内容。

那么你可以像这样选择:

SELECT * FROM chatterdata ORDER BY added DESC

在将值插入数据库之前,我肯定会考虑使用 PDO,或者至少使用 mysql_real_escape_string,因为这样做会带来巨大的安全隐患 :-)

于 2013-04-25T15:08:01.257 回答
1

您可以通过创建一个SentDate字段并按字段排序来完成这项工作SentDate

INSERT INTO chatterdata(Username, Message, SentDate) VALUES ($user, $message, NOW())

由于较新的日期和时间将大于以前的消息,因此较新的日期和时间将显示在顶部。

于 2013-04-25T15:08:23.120 回答