【问题标题】:MYSQL clause not working: UPDATE WHERE MAXMYSQL 子句不起作用:UPDATE WHERE MAX
【发布时间】:2013-07-16 12:24:39
【问题描述】:

我有一段让我发疯的 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 子句),它应该可以正常工作,但是当我按照上面的代码添加它时,它什么也不做(好像表中没有 Hours,这是错误的)。小时类型为 INT。

关于如何使最后一个子句起作用的任何想法?不知何故,它一定是写得不好,但我看不出在哪里。

【问题讨论】:

标签: php mysql max where-clause


【解决方案1】:

您需要在子查询中包含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'
       )

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

【讨论】:

    【解决方案2】:

    只有当记录同时匹配书籍 ID 该学生的最新时间时,它才会更新。如果其中 一个 为假,则不会匹配任何行。

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-08
    • 1970-01-01
    • 2015-01-27
    相关资源
    最近更新 更多