Php MYSQL检索上次查询是更新还是插入

Php MYSQL检索上次查询是更新还是插入,php,mysql,insert,rating,Php,Mysql,Insert,Rating,我正在用PHP和MYSQL开发一个评分系统,上面有投票,下面有投票 我有一个名为投票的数据库,其中包含注册用户所做的所有投票(1表示赞成票,1表示反对票) 对于每一个可以评级的帖子,都有一个所有上升票、下降票以及净投票(上升票减去下降票)的摘要 当有人投票支持一个帖子时,会出现一个插入。。。在重复键更新时插入或更新包含所有投票的表的查询。 然后,我用新的上升票、下降票以及新的净投票数更新posts行 我的问题是,我需要知道第一个查询是插入还是更新,因为如果是更新,我需要减去旧的投票并添加新的投票

我正在用PHP和MYSQL开发一个评分系统,上面有投票,下面有投票

我有一个名为
投票
的数据库,其中包含注册用户所做的所有投票(1表示赞成票,1表示反对票) 对于每一个可以评级的帖子,都有一个所有上升票、下降票以及净投票(上升票减去下降票)的摘要

当有人投票支持一个帖子时,会出现一个插入。。。在重复键更新时插入或更新包含所有投票的表的查询。 然后,我用新的上升票、下降票以及新的净投票数更新posts行


我的问题是,我需要知道第一个查询是插入还是更新,因为如果是更新,我需要减去旧的投票并添加新的投票,但id它只是插入,我不需要减去任何东西,只需增加投票

我建议您不要过早地优化投票计算,在对某个帖子进行每次新投票后,您只需重新计算该帖子的所有投票,无论是触发重新计算的
INSERT
还是
UPDATE
。然后将结果存储到数据库中

此外,更简单的方法是在需要的时候,丢弃甚至总投票缓存并动态计算这些数据

只有当你面临性能问题时,你才应该衡量你的开支,并检查瓶颈是什么。投票计算可能不是应用程序中优化的第一件事


让你的生活更简单。

我建议你不要过早地优化投票计算,每次为某个帖子投票后,你只需重新计算该帖子的所有投票,无论是触发重新计算的
INSERT
还是
UPDATE
。然后将结果存储到数据库中

此外,更简单的方法是在需要的时候,丢弃甚至总投票缓存并动态计算这些数据

只有当你面临性能问题时,你才应该衡量你的开支,并检查瓶颈是什么。投票计算可能不是应用程序中优化的第一件事


让你的生活更简单。

假设你的表上有一个
主键,你可以这样做:

SET @last_insert_id := IFNULL(LAST_INSERT_ID(), 0);

INSERT ... ON DUPLICATE KEY UPDATE ...

SELECT IFNULL(LAST_INSERT_ID(), 0) <> @last_insert_id AS inserted;
SET@last\u insert\u id:=IFNULL(last\u insert\u id(),0);
插入。。。在重复密钥更新时。。。
选择IFNULL(LAST_INSERT_ID(),0)@LAST_INSERT_ID AS inserted;
如果插入的
为TRUE,则插入记录;如果为FALSE,则更新现有记录


当然,此代码假定第一个
最后一个\u INSERT\u ID()
不是从插入到另一个表中设置的。

假定表上有
主键,则可以执行以下操作:

SET @last_insert_id := IFNULL(LAST_INSERT_ID(), 0);

INSERT ... ON DUPLICATE KEY UPDATE ...

SELECT IFNULL(LAST_INSERT_ID(), 0) <> @last_insert_id AS inserted;
SET@last\u insert\u id:=IFNULL(last\u insert\u id(),0);
插入。。。在重复密钥更新时。。。
选择IFNULL(LAST_INSERT_ID(),0)@LAST_INSERT_ID AS inserted;
如果插入的
为TRUE,则插入记录;如果为FALSE,则更新现有记录


当然,此代码假定第一个
最后一个\u INSERT\u ID()
不是从插入到另一个表中设置的。

您不应该再次查询db以计算投票吗?如果其他人同时也投票呢?是的,这是一个好主意,我没有想到比增加东西更好的解决方案。谢谢你不应该再查询数据库来计算选票吗?如果其他人同时也投票呢?是的,这是一个好主意,我没有想到比增加东西更好的解决方案。谢谢谢谢,这是我最后要做的,这会容易得多,一切都会更新!谢谢,这是我最后要做的,它会更容易,一切都将是最新的!