我有这段MySQL代码让我发疯:
UPDATE Sells SET number = '$number'
WHERE id_student = '$id_student' AND id_book = '$id_book'
AND Hour = (SELECT MAX(Hour) FROM Sells WHERE id_student = '$id_student')
它并没有爆炸,但它也没有做它应该做的事情。如果我取出最后一部分(Hour子句)它可以正常工作,但是当我在上面的代码中添加它时,它什么也没做(好像表中没有小时,这是假的)。小时类型是INT。
关于如何让最后一个条款起作用的任何想法?不知何故,它必须写得不好,但我无法看到。
答案 0 :(得分:0)
您需要在子查询中的id_book
上包含过滤器,因为没有它,子查询返回的MAX(Hour)
可能是已在外部查询中过滤的记录:
UPDATE Sells
SET number = '$number'
WHERE id_student = '$id_student'
AND id_book = '$id_book'
AND Hour = (
SELECT MAX(Hour)
FROM Sells
WHERE id_student = '$id_student'
AND id_book = '$id_book'
)
另请注意,您似乎将数字文字引用为字符串,这会导致不必要的类型转换。
答案 1 :(得分:0)
只有当记录与书籍ID 和该学生的最新时间相匹配时,才会更新。如果这些先决条件中的一个为false,则不会匹配任何行。
您可能还需要将书籍条件添加到子选择中。