0

私を怒らせているこの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 です。

最後の句を機能させる方法についてのアイデアはありますか? どういうわけか書き方が悪いに違いないのですが、どこにあるのかわかりません。

4

2 に答える 2

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

数値リテラルを文字列として引用しているように見えることにも注意してください。これにより、不要な型変換が行われます。

于 2013-07-16T12:31:15.933 に答える