2

私は次の表を持っています

+-----------+------------------+------+-----+---------+----------------+
| Field     | Type             | Null | Key | Default | Extra          |
+-----------+------------------+------+-----+---------+----------------+
| ID        | int(11) unsigned | NO   | PRI | NULL    | auto_increment | 
| userid    | int(10) unsigned | NO   | MUL | NULL    |                | 
| logintime | int(10) unsigned | NO   |     | NULL    |                | 
| loginIP   | int(4) unsigned  | NO   |     | NULL    |                | 
+-----------+------------------+------+-----+---------+----------------+

ユーザーがログインするたびに、ログイン時間、IPアドレスなどを含む新しい行をこのテーブルに挿入します...

ここで、行数をユーザーごとに 10 行に制限したいと思います! つまり、userid 5 の行が既に 10 行あり、新しい行を挿入しようとしている場合、挿入する前に最も古い行を削除する必要があります。

DELETE最近の 10 件を除く、ユーザー ID のすべてのエントリを含む SQL ステートメントを作成する方法はありますか。LIMITa の使用方法は知ってSELECTいますが、 LIMIT を a に実装する方法がわかりませんDELETE

4

2 に答える 2

4

これらの行に沿った何かが機能するはずです:

DELETE FROM
  table 
WHERE
 userID = xyz and id not in (
  SELECT id FROM table WHERE userID = xyz ORDER BY logintime DESC LIMIT 10
 )

-- 追加: userID = xyz

于 2012-02-08T17:32:23.653 に答える
0
DELETE from table
WHERE id NOT IN(
      SELECT id FROM table GROUP BY userid ORDER BY logintime DESC LIMIT 10)
于 2012-02-08T17:45:43.350 に答える