2013-07-16 92 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