「user_id」(varchar) と「date」(タイムスタンプ) 列を持つ mysql テーブル (「c5_imgs」) があります。この特定のテーブルのデータ量は、最初に予想していたよりもはるかに多くなったため、最近の 5 件を除く各 user_id のすべてのレコードを削除しようとしています。
特定の user_id に対して、削除したい行を取得できます。
select *
FROM c5_imgs i
where
date < (
select date
from c5_imgs i2
where i.user_id = i2.user_id
order by i2.date desc
limit 4,1
)
and user_id = 'xxx'
しかし、これらの行を削除するのに問題があります:
delete
FROM c5_imgs
where
date < (
select date
from c5_imgs i2
where 'xxx' = i2.user_id
order by i2.date desc
limit 4,1
)
and user_id = 'xxx'
#1093 - You can't specify target table 'c5_imgs' for update in FROM clause
そして、一度に1つだけではなく、すべてのuser_idに対して一般的なクエリを作成したい...助けていただければ幸いです。
編集:chetanの答えは、user_idの1つを削除するのに役立ちましたが、すべてのuser_idのより一般的な解決策を探しています。
Edit2 :私が最終的に使用したクエリは、クリスチャンの回答に基づいていました:
delete aa.*
from c5_imgs aa,
(
select distinct c.user_id as user_id,
(select x.date
from c5_imgs as x
where x.user_id = c.user_id
order by x.date desc
limit 4,1) as date
from c5_imgs as c
) bb
where aa.user_id = bb.user_id and aa.date < bb.date