0

我想做的事情必须广泛适用,但很难描述,所以我将给出我的情况的虚拟版本(假装帖子有时是合着的):

Table A: Users

id  |  name  |...demographics....|  post_count | draft_count

Table B: Posts

id  |  title  |...bunch of columns...| is_draft   

同时

Table C: Users_Posts

id  | user_id  | post_id

现在让我们假设刚刚添加了post_countanddraft_count列——有数千个postsand users。我想填充那些列!我可以做到这一点:

SELECT count(*) FROM `people` 
    JOIN `users_posts` ON `users`.`id`=`users_posts`.`users_id`
    JOIN `posts` ON `users_posts`.`post_id`=`posts`.`id`
    WHERE `posts`.`is_draft` = 1 AND `users`.`id`= N

这给了我希望更新user Ndraft_count字段的数字。但我不确定如何将整个事情作为语句中的一个子句UPDATE。我已经阅读了如何在 MySQL 中进行迭代,我想我明白了,所以如果我能让它工作,我想我可以为每个user. 此外,虽然我可以在 PHP 中轻松实现这一点,但我需要定期运行它,因为可能只会对这些表进行批量添加(显然,IRL 应用程序不是博客)。再一次,我已经阅读了如何创建自定义 MySQL 函数,我想我可以做到这一点,如果我能让这个该死的更新业务工作哈哈。帮助表示赞赏!

4

1 回答 1

1
UPDATE users
JOIN (
    SELECT COUNT(posts.id) as draft_count, users_posts.users_id
    FROM posts 
    JOIN users_posts ON users_posts.post_id = posts.id
    WHERE posts.is_draft = 1
    GROUP BY users_posts.users_id
) as draft_counts ON users.id = draft_counts.users_id
SET users.draft_count = draft_counts.draft_count

如果您有很多行,使用临时表可能会更快。

于 2013-03-28T23:04:18.870 回答