我有两个MySQL表,一个带有DateTaken
,另一个带有LastReviewed
,两者都存储过去的值的日期时间。两个表都有一个UserID
列(不是索引唯一的)我有一些查询,这些查询旨在向前移动绑定到特定用户的所有日期,以便最大值现在正确。这些是我的疑问:
// Step 1: calculate and store the offset
SELECT @offset := DATEDIFF(
CURDATE(),
(SELECT MAX(r.LastReviewed)
FROM `results` r WHERE r.`UserID`= 123
)
// step 2: shift dates in drills table by the offset
UPDATE `drills` d
SET d.`DateTaken` = d.`DateTaken` + INTERVAL @offset DAY
WHERE d.`UserID`=123
// step 3: shift dates in results table by the offset
UPDATE `results`
SET LastReviewed = LastReviewed + INTERVAL @offset DAY
WHERE UserID = 123
我使用PHP的mysqli::multi_query运行这些查询。类似的东西:
$mysqli = new mysqli("localhost", "my_user", "my_password", "world");
$mysqli->multi_query("$step1; $step2; $step3");
发生了奇怪的事情,但我无法弄明白为什么。如果我按照上面的顺序运行查询,则两个表都会正确更新。但是,如果我改变第2步和第3步:
$mysqli->multi_query("$step1; $step3; $step2");
然后drills
表(来自第2步)确实不更新,但results
表(来自第3步)确实更新了。那为什么会这样?由于步骤2和3是独立的,因此对我来说似乎不合逻辑。