テーブルから最後の 10 件を除くすべての結果を削除しようとしています。それはそれほど難しいことではありませんが、特定の基準に一致する必要もあります。
テーブルは次のようになります。
chat_id
location_id
user_id
message
created
技術的には、特定の location_id を持つすべてを削除し、最後の 10 レコードをテーブルに保持する必要があります。
これは Active Record クラスで可能ですか?
前もって感謝します
テーブルから最後の 10 件を除くすべての結果を削除しようとしています。それはそれほど難しいことではありませんが、特定の基準に一致する必要もあります。
テーブルは次のようになります。
chat_id
location_id
user_id
message
created
技術的には、特定の location_id を持つすべてを削除し、最後の 10 レコードをテーブルに保持する必要があります。
これは Active Record クラスで可能ですか?
前もって感謝します
あなたがこのSQLクエリを試すことができる間、病気はアクティブなレコードを思い付くでしょう:
$this->db->query('
delete from table_name where chat_id NOT IN
(select chat_id from table_name where location_id=1292 order by chat_id DESC LIMIT 10)
')
最適な解決策ではありませんが、これが役立つと思います。
あなたの質問から、基準は特定のものであると推測していますlocation_id
。
作成されたフィールドがタイムスタンプ フィールドであり、最後の 10 レコード (最新の 10 レコードを意味する) である場合、次のようなクエリを使用できます。
DELETE FROM `table`
WHERE created<
(select min(a.cdate) from
(
select b.created as cdate from `table` b
where b.location_id=<<loc_id>>
order by b.created desc limit 10
) a
)
AND location_id=<<loc_id>>;