gpt4 book ai didi

MySQL:连接 HABTM 表,然后用结果计数更新列

转载 作者:行者123 更新时间:2023-11-29 13:57:03 24 4
gpt4 key购买 nike

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

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_countdraft_count 列 — 有数千个 postsusers 。我想填充这些列!我能走到这一步:

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 中进行迭代,我想我明白了,所以如果我能让它工作,我想我可以为每个用户做到这一点。此外,虽然我可以在 PHP 中轻松实现这一点,但我需要定期运行它,因为可能只会批量添加这些表(显然,IRL 应用程序不是博客)。再次,我已经阅读了如何创建自定义 MySQL 函数,并且我想如果我能让这个该死的更新业务正常工作的话我就可以做到,哈哈。感谢帮助!

最佳答案

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

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

关于MySQL:连接 HABTM 表,然后用结果计数更新列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15693558/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com