mysql - 如何创建一个 SQL 触发器来抓取传递到激活触发器的查询中的数据?

标签 mysql

我想在将条目添加到 votes 时做到这一点表,以 user 为准message/comment被投票的获得进入他们的 total_votes 。我调查了sql triggers看起来这就是我想要的,但我不确定如何从用户创建的投票中获取信息,以便查找正确的 messageId从而找到发布该消息的用户。

CREATE TABLE marks (
  id int(5) AUTO_INCREMENT,
  PRIMARY KEY (id),
  x float(10, 6),
  y float(10, 6),
  z float(10, 6),
  timestamp timestamp DEFAULT CURRENT_TIMESTAMP,
  messageId int(5) NULL,
  commentId int(5) NULL,
  userToken VARCHAR(255),
  FOREIGN KEY (messageId) REFERENCES messages(id),
  FOREIGN KEY (commentId) REFERENCES comments(id),
  FOREIGN KEY (userToken) REFERENCES users(token)
);

CREATE TABLE messages (
  id int(5) AUTO_INCREMENT,
  messageString text,
  image varchar(255),
  score int(5) DEFAULT 0,
  PRIMARY KEY (id)
);

CREATE TABLE comments (
  id int(5) AUTO_INCREMENT,
  commentString text,
  messageId int(5),
  PRIMARY KEY (id),
  FOREIGN KEY (messageId) REFERENCES messages(id)
);

CREATE TABLE votes (
  id int(5) AUTO_INCREMENT,
  PRIMARY KEY(id),
  userToken VARCHAR(255),
  messageId int(5) NULL,
  commentId int(5) NULL,
  FOREIGN KEY (userToken) REFERENCES users(token),
  FOREIGN KEY (messageId) REFERENCES messages(id),
  FOREIGN KEY (commentId) REFERENCES comments(id),
  UNIQUE KEY (userToken, messageId),
  UNIQUE KEY (userToken, commentId)
);

CREATE TABLE users (
  token VARCHAR(255),
  PRIMARY KEY(token),
  total_votes int(5)
);

最佳答案

您可以使用 NEW. 前缀引用触发器中的新值。即,如果您插入包含字段 value 的行,则该字段在触发器中可用为 NEW.value,从那里构造一个 在为您的投票表插入 触发器之后。像这样的东西:

DELIMITER //
create trigger vote_increment after insert on votes
for each row
begin
  update users set total_votes = total_votes + 1 where token = NEW.user_token;
end//
DELIMITER ;

demo fiddle here

我不确定你的最终逻辑需要是什么,因为你提到了消息表,而且我不明白为什么有必要让用户更新他们的总数,因为投票表包含 用户 token

关于mysql - 如何创建一个 SQL 触发器来抓取传递到激活触发器的查询中的数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29639466/

相关文章:

php - SQL 查询返回整个表而不是单行

javascript - 发布请求 express : Cannot set headers after they are sent to the client

php - mysql查询在php中导出CSV文件

mysql - 选择一个值,其中另一列具有最高值

mysql - 查询难度更大的多对多关系

mysql - 上个月在mysql中的销售额

mysql - 将文本追加和前置到列

mysql - 选择分组依据并对具有相同金额的列求和

mysql - 如何禁用 OUTFILE 和 INFILE?

mysql - 为每个不同的列值选择第一行