MYSQL子句不起作用:UPDATE WHERE MAX

时间:2013-07-16 12:24:39

标签: 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子句)它可以正常工作,但是当我在上面的代码中添加它时,它什么也没做(好像表中没有小时,这是假的)。小时类型是INT。

关于如何让最后一个条款起作用的任何想法?不知何故,它必须写得不好,但我无法看到。

2 个答案:

答案 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,则不会匹配任何行。

您可能还需要将书籍条件添加到子选择中。