0

メンバーポイントが最大値に等しい場合、このクエリを実行してメンバーポイントを更新しようとしていますか?勝者の賞品を設定するために...しかし、私はこのエラーを取得しています..ありがとう

エラー:SQL構文にエラーがあります。4行目の「WHEREa.points=max(a.points)AND b.event_id = 4」の近くで使用する正しい構文については、MySQLサーバーのバージョンに対応するマニュアルを確認してください。

    $ 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
    WHERE a.points = max(a.points)AND b.event_id ='{$ this-> event-> getIdentity()}';

    ";

4

1 に答える 1

0

データ構造を正しく理解している場合は、WHERE句の相関サブクエリを使用してこれを行うことができます。

resource_idが入力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 に答える