我有三张桌子:
// users
+----+------+------------+
| id | name | reputation |
+----+------+------------+
// posts
+----+-------+---------+
| id | title | user_id |
+----+-------+---------+
// votes
+----+---------+---------+
| id | user_id | post_id |
+----+---------+---------+
注意:user_id
中的{/ strong> votes
属于谁投票。但是user_id
表中的posts
属于撰写该帖子的人。
所以当他的评论获得一个upvote时,我想给帖子的所有者+5代表。
示例:当 userA 向帖子提供upvote(由 userB 提出)时,我想运行此命令:
update users set reputatuin=reputation+5 where id = {how get the id of userB}
现在我想知道,我应该如何获得userB(编写它的帖子所有者)id?
答案 0 :(得分:1)
在UPDATE
声明中,您必须使用MySQL's multi-table UPDATE
syntax通过posts
加入votes
表。
如果您想通过定位新投票的votes.id
进行更新,请在WHERE
子句中使用该内容。
UPDATE
users
INNER JOIN posts ON users.id = posts.user_id
INNER JOIN votes ON votes.post_id = posts.id
SET
users.reputation = users.reputation + 5
WHERE votes.id = {vote id to update}
如果您的代码已经知道所投票帖的posts.id
,则无需加入votes
表,您可以使用users
和posts
。< / p>
UPDATE
users
INNER JOIN posts ON users.id = posts.user_id
SET
users.reputation = users.reputation + 5
WHERE posts.id = {post id of new vote}
使用WHERE
子句中的子查询可以轻松完成此查询。
UPDATE users
SET reputation = reputation + 5
WHERE
id = (SELECT user_id FROM posts WHERE post_id = {post id of new vote})