我试图运行此查询以更新成员点当成员点数等于最大值时?设置获奖者奖......但是我得到了这个错误..谢谢
错误:您的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()}'; ";
答案 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的一个限制。