正確的語法手冊正確理解數據結構,可以使用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的限制。
'case b.prize'是什麼意思? – zerkms
從b.prize中刪除case作爲@zerkms已經提到 – dbf
如果$ this-> event-> getIdentity()在任何情況下都可以是字符串,那麼您的代碼可能容易受到SQL注入的攻擊。 – ekolis