我正在开发聊天应用程序。
我有两个表messages和message_archives,两个表列都是相同的。
我的messages表包含了100000条记录。我想将记录从30天以上的消息中移到message_archives。
我的守则:
$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!!!.";
}上面的代码工作得很好。但我需要定制我的代码。我只需要一次查询。是否有任何快捷的方式来进行单一查询?
发布于 2014-09-24 04:46:49
我建议不要循环结果集来移动它们,而是只使用一个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)顺便说一句--您确定要同时为user_id和friend_id字段插入user_id吗?也许那是个错误。
https://stackoverflow.com/questions/26008598
复制相似问题