2013-07-16 64 views
0

我有这一块的MySQL的代码是快把我逼疯了:MYSQL条款不工作:UPDATE WHERE MAX

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') 

它不会炸毁,但它不会做什么是应该做的要么。如果我拿出最后一部分(小时条款),它应该像它应该的那样工作,但是当我像上面的代码中那样添加它时,它什么都不做(就好像表中没有小时,这是错误的)。小时类型是INT。

关于如何获得最后一个子句的任何想法?不知何故,它必须写得不好,但我看不到在哪里。

+0

看出: http://stackoverflow.com/questions/12242466/update-row-with-max-value-of-field – jmarceli

回答

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' 
     ) 

还要注意您似乎将数字文字引用为字符串,这会导致不必要的类型转换。

0

如果记录都匹配的书籍ID 为学生最新的小时它只会更新。如果其中一个的这些先决条件是错误的,则不会匹配任何行。

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

+0

有了完整的PHP代码(我还没有包括在内),这种情况下不可能。 但是,我发现这里的解决方案 http://stackoverflow.com/questions/4429319/you-cant-specify-target-table-for-update-in-from-from-条款 谢谢! – gerd