Php MYSQL子句不工作:更新WHERE MAX

Php MYSQL子句不工作:更新WHERE MAX,php,mysql,max,where-clause,Php,Mysql,Max,Where Clause,我有一段让我发疯的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子句的最后一部分,它会正常工作,但是当我在上面的代

我有一段让我发疯的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子句的最后一部分,它会正常工作,但是当我在上面的代码中添加它时,它只是不做任何事情,就像表中没有Hour一样,这是错误的。小时类型为INT


有没有办法让最后一条生效?不知怎的,它一定写得不好,但我不知道在哪里

您需要在子查询中包含id_book上的过滤器,因为如果没有它,子查询返回的MAXHour可能是在外部查询中过滤的记录的MAXHour:

更新销售 集合编号=“$number” 其中id_student=“$id_student” 而id_book=“$id_book” 和小时= 选择MAXHour 来自销售 其中id_student=“$id_student” 而id_book=“$id_book”
还请注意,您似乎将数字文字引用为字符串,这会导致不必要的类型转换。

只有当记录与图书id和该学生的最近一小时相匹配时,它才会更新。如果其中一个前提条件为false,则没有匹配的行


您可能还需要将book条件添加到subselect中。

请参见:由于我没有包含完整的php代码,这种情况是不可能的。不过,我在这里找到了解决方案,谢谢!