http://sqlfiddle.com/#!2/d21f3/1
ここにいくつかのエントリを含むテーブルがあります。このテーブルに でソートされた 50 個のメッセージだけを保持し、残りのエントリmessage_id
を削除します。
クエリを手伝ってください。
前もって感謝します。
http://sqlfiddle.com/#!2/d21f3/1
ここにいくつかのエントリを含むテーブルがあります。このテーブルに でソートされた 50 個のメッセージだけを保持し、残りのエントリmessage_id
を削除します。
クエリを手伝ってください。
前もって感謝します。
これを試してみてください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)
例えば。
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;