2016-10-11 3 views
2

これは何のように何かをする方法を見つけようとしていますDelete all records except the most recent one? しかし私は私の状況にそれを適用することができませんでした。Arma 2 DayZエポックSQLデッドボディクリーナー

マイ状況: https://gyazo.com/178b2493e42aa4ec4e1a9ce0cbdb95d3

SELECT * FROM dayz_epoch.character_data; 

CharacterID, PlayerUID, InstanceID, Datestamp, LastLogin, Alive, Generation 

5 |76561198068668633|11|2016-05-31 18:21:37|2016-06-01 15:58:03|0|1 
6 |76561198068668633|11|2016-06-01 15:58:20|2016-10-08 21:30:36|0|2 
7 |76561198068668633|11|2016-10-08 21:30:52|2016-10-09 18:59:07|1|3 
9 |76561198010759031|11|2016-10-08 21:48:32|2016-10-08 21:53:31|0|2 
10|76561198010759031|11|2016-10-08 21:53:55|2016-10-09 19:07:28|1|3 

(上の画像を見てください)だから私は現在、私のDayZエポック・サーバのための私のデータベースから死体を削除するためのより良い方法を作るしようとしています。同じPlayerUIDにALIVE = 1の別のインスタンスがある場合は、ALIVE = 0の場合はコードが必要です。

他にも、PlayerUIDごとに最新のものを除いてすべてのプレーヤーを削除するだけです。私はこれが理にかなってほしい。説明するのは難しいです。最初のリンクは私にとってより良く説明しています。

しかし、基本的には、同じPlayerUIDを持つ生きているプレイヤーがいるデッドプレイヤーを削除します。コーディングがうまくいけば、私はPlayerUID(必須)、Datestamp、Alive、世代のように使うことができる多くの変数を見ることができました。おそらく2つしか必要ではないでしょう.1つはPlayerUIDです。

ありがとうございます。

私は、PlayerUIDによってSORTされ、各PlayerUIDがすべての例外(?)最新のDatestampを削除するように思えます。 これは、このスクリプトが呼び出される前に新しいキャラクターを作成しない場合に備えて、死者の身体からプレーヤーの統計を保持します。

+0

プレーンテキストのデータをスクリーンショットではなくテキストとして送信してください。その写真は[SQLFiddle](http://sqlfiddle.com)のようなツールに入れて答えをテストすることはできません。 – tadman

+0

プレーンテキストが追加されました。これはあなたがそれを望んでいたか? – looter809

+0

これは、この質問に答えたい人にとっては、より多くの役に立ちます。 – tadman

答えて

0

基本的に、プレーヤーのInsert(またはALIVEを1に更新)では、以前と同じPlayerUIDを持つすべてのプレイヤーを削除する必要があります新しいもの。

最も簡単なのは、挿入の前に実行されるトリガーを作成することです(また、ALIVEを1に更新して1つに戻すことが可能な場合はUPDATEにする)。新しいプレーヤーのUIDを使用して、特定のUIDのテーブルで削除を実行します。トリガー用)

、これは(それほど新しいものを削除しない)。これは、テーブルdayz_epoch.character_data に挿入する前に実行されます。この

Create trigger CLEAR_PLAYER 
    before insert on dayz_epoch.character_data 
    For Each Row 
     Delete from dayz_epoch.character_data 
      where PlayerUID = NEW.PlayerUID 
      and Alive = 0 --Just in case, but what will happen if there where a line with Alive = 1 ? 

のようになります。これは簡単なことです。これにより、挿入された行のPlayerUIDのすべての行が削除されます。セキュリティを追加したい場合は、条件にand Alive= 0を追加することができます。

編集:

は長い時間でトリガを書いていないが、私はメモとしてofficial docを使用しています。必要があれば見てください。

+0

は 'dayz_epoch.character_data から削除dayz_epoch.character_data に挿入する前にトリガCLEAR_PLAYERを作成ところPlayerUID = NEW.PlayerUID AND「ALIVE」= 0 'エラーコード言って – looter809

+0

:あなたはあなたのSQL構文でエラーが発生している1064。あなたのMySQLサーバのバージョンに対応するマニュアルをチェックしてください。右側の構文は、2行目の「dayu_epoch.character_dataからPlayerUID = NEW.PlayerUIDから削除する」の近くで使用してください。 – looter809

+0

よろしく、 'For each row'を追加して受け入れました。すぐにテストしてお知らせします。 – looter809

関連する問題