如果上次查询是更新或插入,则MYSQL检索

时间:2012-07-22 17:46:47

标签: php mysql insert rating

我正在研究PHP和MYSQL的评级系统,投票率和投票率下降。

我有一个名为votes的数据库,其中包含注册用户完成的所有投票(1表示投票,-1表示投票) 对于每个可以评级的帖子,都会记录所有的票数,票数以及净票数(上调减去票数)。

当有人投票时,有一个INSERT ... ON DUPLICATE KEY UPDATE查询会插入或更新包含所有投票的表格。 然后,我用新的投票数,投票数和新的净票数更新帖子行。

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

2 个答案:

答案 0 :(得分:2)

我建议您不要过早优化投票计算,并且在每次新投票之后,您只需重新计算此帖子的所有投票,无论是INSERT还是UPDATE这引发了重新计算。然后将结果存储到DB。

此外,即使总票数缓存也可以更简单地丢弃,并在需要时随时计算。

只有当您遇到性能问题时,您应该测量您的费用并检查,瓶颈是什么。可能的情况是,投票计算应该不是您应用程序中优化的第一件事。

让您的生活更简单。

答案 1 :(得分:2)

假设桌面上有PRIMARY KEY,您可以这样做:

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;

如果inserted为TRUE,则插入记录,如果为FALSE,则更新现有记录。

当然,此代码假定第一个LAST_INSERT_ID()未从插入到另一个表中设置。