如何通过中介从表中获取数据

时间:2015-08-20 15:51:50

标签: mysql join

我有三张桌子:

// 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?

1 个答案:

答案 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表,您可以使用usersposts。< / 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})