首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据从一个表移动到另一个超过30天记录的表中?

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

Stack Overflow用户
提问于 2014-09-24 04:32:41
回答 1查看 3.8K关注 0票数 0

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

我有两个表messagesmessage_archives,两个表列都是相同的。

我的messages表包含了100000条记录。我想将记录从30天以上的消息中移到message_archives

我的守则:

代码语言:javascript
复制
$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!!!.";
}

上面的代码工作得很好。但我需要定制我的代码。我只需要一次查询。是否有任何快捷的方式来进行单一查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-24 04:46:49

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

代码语言:javascript
复制
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)

顺便说一句--您确定要同时为user_idfriend_id字段插入user_id吗?也许那是个错误。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26008598

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档