如何更新当一个值等于最大值?

时间:2012-09-09 23:20:37

标签: php sql max

我试图运行此查询以更新成员点当成员点数等于最大值时?设置获奖者奖......但是我得到了这个错误..谢谢

错误:您的SQL语法出错;查看与MySQL服务器版本对应的手册,以便在第4行的'WHERE a.points = max(a.points)AND b.event_id = 4'附近使用正确的语法


    $sql="

    UPDATE engine4_event_membership a
    INNER JOIN engine4_event_events b ON b.event_id = a.resource_id
    SET a.points = a.points + case b.prize 
    WHERE a.points = max(a.points) AND b.event_id = '{$this->event->getIdentity()}';

    ";

1 个答案:

答案 0 :(得分:0)

如果我正确理解数据结构,可以使用WHERE子句中的相关子查询来完成此操作。

您正在更新其中resource_id为输入标识的成员资格表。您正在寻找具有最高分的记录。以下应该这样做:

UPDATE engine4_event_membership a join
       engine4_event_events b
       on b.event_id = a.resource_id
    SET a.points = a.points + b.prize 
    WHERE a.resource_id = '{$this->event->getIdentity()}' and
          a.points = (select max(a2.points)
                      from engine4_event_membership a2
                      where a2.resource_id a.resource_id
                     )

这可能会得到相同的MySQL错误。因此,需要将WHERE子句移动到连接:

UPDATE engine4_event_membership a join
       engine4_event_events b
       on b.event_id = a.resource_id join
       (select resource_id, max(points) as maxpoints
        from engine4_event_membership
        group by resource_id
       ) amax
       on a.resource_id = amax.resource_id and
          a.points = amax.points
    SET a.points = a.points + b.prize 
    WHERE a.resource_id = '{$this->event->getIdentity()}'

无法在相关子查询中使用目标表是MySQL的一个限制。