我希望在条目添加到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)
);
答案 0 :(得分:1)
您可以使用NEW.
前缀来引用触发器中的新值。即如果您插入包含字段value
的行,则该字段在触发器中可用为NEW.value
,从那里可以很容易地为您的投票表构造after insert
触发器。像这样的东西:
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 ;
我不确定你的最终逻辑是什么,因为你提到了消息表,我不明白为什么只需让用户更新他们的总数,因为投票表包含{{1 }}