我想尝试根据另一个表中的搜索在SQL表中设置两个值。我的查询如下:
UPDATE $postmeta
SET meta_key = '_bbps_topic_status',
meta_value = '1'
WHERE post_id IN (
SELECT ID
FROM $posts
WHERE post_type='topic'
)
我想对25,148行的整个表执行此操作,但即使增加了服务器上的所有限制,我也会收到内存错误。我知道MySQL不允许你在500组中批量操作,但有没有办法编写一个将这个操作分成更小块的脚本?
提前致谢!
编辑:查询包含日期范围:
UPDATE $postmeta
SET meta_key = '_bbps_topic_status',
meta_value = '1'
WHERE post_id IN (
SELECT ID
FROM $posts
WHERE post_type='topic'
AND DATE_SUB(
CURDATE(),
INTERVAL 30 DAY
) <= post_date
)
答案 0 :(得分:2)
使用联接方法和来自post_id
表的$postmeta
的索引会很有帮助
UPDATE $postmeta m
JOIN $posts p ON(p.ID = m.post_id )
SET m.meta_key = '_bbps_topic_status',
m.meta_value = '1'
WHERE p.post_type='topic'
AND p.post_date <= NOW() - INTERVAL 30 DAY
请注意,您正在使用将针对每一行运行的子查询,而是使用join也在日期列上添加索引以提高查询的性能