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

时间:2014-09-24 04:32:42

标签: mysql sql

我正在开发聊天应用。

我有两个表格messagesmessage_archives两个表格列相同。

我的messages表包含1,00,000条记录。我想将记录移至message_archives来自超过30天的邮件。

我的代码:

$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!!!.";
}

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

1 个答案:

答案 0 :(得分: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)

BTW - 您确定要为user_iduser_id字段插入friend_id吗?也许这是一个错字。