2011-06-05 38 views
1

如何在另一个表中发生某些事情时更新表中的值?如果在另一个表中发生更新值

例如,

我有一个like表设置,当有人喜欢一个帖子,我想“numberOfLikes”中的“文章”表增加。

我怎么能做到这一点?

+0

MySQL 5或更高版本? – 2011-06-05 00:24:51

+0

不知道,我怎么知道? – Harigntka 2011-06-05 00:27:15

+0

'select @@ version;' – 2011-06-05 00:27:31

回答

1

而且只是在做一个update同时作为insert荷兰国际集团等等,你可以在like表上创建触发器来更新posts表。

delimiter | 

create trigger likepost after insert on like 
    for each row begin 
    update posts set likes = likes + 1 where post_id = new.post_id; 
    end; 
| 

delimiter ; 

(以上是迅速从the documentation适应,所以你必须改变它为您的实际架构设计。)

您还需要创建一个处理去除触发(S)也喜欢。

+0

我编辑它以符合目的,并且我得到了错误:拒绝访问;您需要SUPER权限才能执行此操作。我知道它不会导致错误,但我的代码是:'delimiter | CREATE trigger likepost AFTER INSERT ON赞 FOR每个 ROW BEGIN 更新文章SET numberOfLikes = numberOfLikes +1 WHERE id = postID; END; | delimiter;' – Harigntka 2011-06-05 00:39:14

+0

这将需要'WHERE id = NEW.postID',因为'NEW'代表您刚刚插入的'Likes'中的新行,因此您需要引用该字段。但是,“访问被拒绝”消息意味着MySQL用户没有权限创建触发器。 – 2011-06-05 00:41:24

+0

我怎么能让我(用户)有这个特权? – Harigntka 2011-06-05 00:42:54

0

我不知道你要在喜欢的表中添加什么,但这是你应该在帖子表中做的。

UPDATE Posts set numberOfLikes = numberOfLikes + 1 WHERE post_id = 'x' 

这就是查询,当有人喜欢某个帖子时运行该查询。

例如:

<a href="?like=5">Like this post</a> 

然后

<?php 
    if (isset($_GET['like']) && is_numeric($_GET['like'])) { 
     $update = mysql_query("UPDATE Posts set numberOfLikes = numberOfLikes + 1 WHERE post_id = '".$_GET['like']."'"); 

     if ($update) { 
      echo "Thank you sir!"; 
     } else { 
      echo "Oups, try again!"; 
     } 
    } 
?> 
+0

哦,好像我误解了这个问题...对不起:) – tbleckert 2011-06-05 00:41:03

相关问题