我正在开发聊天应用程序.
我有两个表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)
以上代码完美运行.但我需要自定义我的代码.我在单个查询中需要它.有单一查询的快捷方式吗?
我建议不要循环结果集来移动它们,而只是使用单个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_id和friend_id领域?也许这是一个错字.
| 归档时间: |
|
| 查看次数: |
2714 次 |
| 最近记录: |