0

さまざまな座標でゲーム アクティビティの db テーブルをクエリするシステムがあります。特定のプレーヤーによるアクティビティを照会する必要がありますが、同じ座標で新しいエントリに一致するものを除外する必要があります (他のプレーヤーによるものであるかどうかにかかわらず)。

サンプルクエリは次のとおりです。

SELECT * FROM prism_actions
WHERE world = 'world'
AND (action_type = 'block-place')
AND (player = 'viveleroi')
AND (x BETWEEN -448.7667627678472 AND -438.7667627678472)
AND (y BETWEEN 62.0 AND 72.0)
AND (z BETWEEN -291.17236958025796 AND -281.17236958025796)
ORDER BY x,y,z ASC
LIMIT 0,1000000

サブクエリと内部結合で機能させようとしましたが、取得できません。私は本当にこれも迅速にできるようにする必要があります。

基本的に、同じ X、Y、Z を持つが新しい action_time を持つ別のレコードがある場合、座標 X、Y、Z のレコードを除外するには、このクエリが必要です。

また、新しい一致が入力されたときに同じ x、y、z でレコードを期限切れにする方法も検討しましたが、それは私が望むほど効率的ではないようです。

4

1 に答える 1

0

これを行うには、「最新の」座標を除外するサブクエリに参加します。

SELECT prism_actions.*
FROM prism_actions
JOIN (
    SELECT x, y, z, max(action_time) as action_time
    FROM prism_actions
    GROUP BY x, y, z) latest
  ON prism_actions.action_time = latest.action_time
  AND prism_actions.x = latest.x
  AND prism_actions.y = latest.y
  AND prism_actions.z = latest.z
WHERE prism_actions.world = 'world'
AND (prism_actions.action_type = 'block-place')
AND (prism_actions.player = 'viveleroi')
AND (prism_actions.x BETWEEN -448.7667627678472 AND -438.7667627678472)
AND (prism_actions.y BETWEEN 62.0 AND 72.0)
AND (prism_actions.z BETWEEN -291.17236958025796 AND -281.17236958025796)
ORDER BY x,y,z ASC
LIMIT 0,1000000
于 2013-01-01T21:44:39.007 に答える