如何将一个表的数据移动到另一个超过30天的表记录?

Dev*_*per 0 mysql sql

我正在开发聊天应用程序.

我有两个表messages,message_archives两个表列相同.

我的messages表包含1,00,000条记录.我想将记录移到message_archives30天以上的邮件中.

我的代码:

$privateMsg = mysql_query("SELECT * FROM messages WHERE created < DATE_SUB(curdate(), INTERVAL 30 DAY)");
if(mysql_num_rows($privateMsg)){
    while($getPrivateMsg=mysql_fetch_array($privateMsg)){
        mysql_query("INSERT INTO message_archives SET user_id='".$getPrivateMsg['user_id']."', friend_id='".$getPrivateMsg['user_id']."', message='".$getPrivateMsg['message']."', is_view='0', created='".$getPrivateMsg['created']."'");

        mysql_query("DELETE FROM messages WHERE id='".$getPrivateMsg['id']."'");
    }
    echo "Message move to archives older than 30 days";
}else{
    echo "Error!! message not moved!!!.";
}
Run Code Online (Sandbox Code Playgroud)

以上代码完美运行.但我需要自定义我的代码.我在单个查询中需要它.有单一查询的快捷方式吗?

sge*_*des 6

我建议不要循环结果集来移动它们,而只是使用单个INSERT语句和单个DELETE语句:

INSERT INTO message_archives (user_id, friend_id, message, is_view, created)
SELECT user_id, user_id, message, 0, created
FROM messages 
WHERE created < DATE_SUB(curdate(), INTERVAL 30 DAY)

DELETE FROM messages 
WHERE created < DATE_SUB(curdate(), INTERVAL 30 DAY)
Run Code Online (Sandbox Code Playgroud)

顺便说一句-你确定要插入user_id的两个user_idfriend_id领域?也许这是一个错字.