使用PHP和MYSQLi在数据库中每24小时删除一次数据

时间:2015-07-27 12:56:24

标签: php database mysqli

我想知道你是怎么做到的:

我制作了一种聊天框,可以通过脚本自动更新它,并从数据库中加载最新的50条聊天消息。

现在我想知道,如何在每24小时后删除邮件,但保留第一条新的50封邮件,然后删除旧邮件。

MYSQLi和PHP可以实现这一点,还是必须使用更好的解决方案?

更新

来自Lund的建议以及我的提供者的快速回复: 我无法用我当前的计划做Cron Jobs或MYSQL Events。 我也没有钱升级它,所以呃......如果有的话 另一种解决方案,谢谢你帮助我解决这个问题。

我有一个名为:chatbox的表 并在其中有这个:

C_ID
chattext
name
date

2 个答案:

答案 0 :(得分:0)

您应该检查MYSQL事件。

您可以创建一个事件(例如删除功能),每天运行一次。

MySQL Create Event docs

答案 1 :(得分:0)

伪代码(实际上没有工作没有一些编辑来适应你的代码,但它的想法) - 我不知道你的数据是如何存储的,或者它的变量名。或者你的表名。或者基本上我需要的任何信息才能实现这一点。

$sql = ("SELECT * FROM ChatLog ORDER BY TimeAdded DESC"); //Order by descending should show the newest ones first.

$index = 1; //set an index to loop through

while($row = mysqli_query($con, $sql) { //use a while loop to go through the table

    if($index <= 50) { //for the first 50 records
        //do nothing
    } else { //for everything after 50 records
        $chatId = $row['chatLogID']; //ID or unique value for the actual message.
        $sql = ("DELETE FROM ChatLog WHERE chatLogID='$chatId'"); //Delete it from the table
        mysqli_query($con, $sql);//Execute query.
    }

}

您可以将其设置为每次存储邮件时执行,或者根据服务器的当前时间进行检查以将其每天删除。

更新:此代码应与您的代码一起使用

$sql = ("SELECT * FROM chatbox ORDER BY time DESC"); //Order by descending should show the newest ones first.

$index = 1; //set an index to loop through

while($row = mysqli_query($con, $sql) { //use a while loop to go through the table

    if($index <= 50) { //for the first 50 records
        //do nothing
    } else { //for everything after 50 records
        $chatId = $row['C_ID']; //ID or unique value for the actual message.
        $sql = ("DELETE FROM chatbox WHERE C_ID='$chatId'"); //Delete it from the table
        mysqli_query($con, $sql);//Execute query.
    }

}