0

我试图运行此查询以更新成员点当成员点等于最大值时?设置获胜者奖品...但我收到此错误...谢谢

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

    $sql="

    更新 engine4_event_membership 一个
    INNER JOIN engine4_event_events b ON b.event_id = a.resource_id
    SET a.points = a.points + case b.prize
    其中 a.points = max(a.points) AND b.event_id = '{$this->event->getIdentity()}';

    ";

4

1 回答 1

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 的一个限制。

于 2012-09-09T23:56:10.073 回答