0

http://sqlfiddle.com/#!2/d21f3/1

ここにいくつかのエントリを含むテーブルがあります。このテーブルに でソートされた 50 個のメッセージだけを保持し、残りのエントリmessage_id削除します。

クエリを手伝ってください。

前もって感謝します。

4

2 に答える 2

1

これを試してみてくださいORDER BY message_id DESC。必要に応じて変更してください。選択した50エントリを除くすべてが削除されます。同じテーブルを使用して削除操作で選択できないため、クエリにエイリアスを付けました。

DELETE FROM `chat_history` WHERE id NOT IN ( SELECT t.id FROM 
(SELECT id FROM chat_history ORDER BY message_id DESC LIMIT 50 ) t)
于 2013-11-07T14:35:47.407 に答える
1

例えば。

DELETE a 
  FROM chat_history a 
  LEFT 
  JOIN 
     ( SELECT x.message_id 
         FROM chat_history x 
         JOIN chat_history y 
           ON y.message_id >= x.message_id 
        GROUP 
           BY x.message_id 
       HAVING COUNT(*) <= 50
     ) b 
    ON b.message_id = a.message_id 
 WHERE b.message_id IS NULL;

http://sqlfiddle.com/#!2/361b4/1

于 2013-11-07T14:41:30.647 に答える