2012-02-08 22 views
2

私は今、私は制限したいデータベースの行数を自動的に制限する方法は?

...私はIPアドレスなど、自分のログイン時間を含む、この表では、ユーザーがログインするたびに新しい行を挿入、次の表

+-----------+------------------+------+-----+---------+----------------+ 
| 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 |    | 
+-----------+------------------+------+-----+---------+----------------+ 

を持っていますユーザーあたり10個までの行数!つまり、ユーザーID5の行がすでに10行ある場合は、新しい行を挿入しています。挿入前に最も古い行を削除する必要があります。

は、DELETEの最近の10個を除くすべてのユーザーIDのエントリをSQL文で記述する手段です。私はSELECTのためにLIMITを使用する方法を知っていますが、私はDELETEでLIMITをどのように実装することができません。これらの線に沿って

+2

は、[トリガー](HTTPを使用するための完璧なケースのように思えるところ。 mysql.com/doc/refman/5.0/ja/triggers.html) – bfavaretto

+0

@Riki Lyng SQLはこの機能を直接提供していません。 bfavarettoが言っているように、テーブルへの挿入を削除または制限するトリガーを追加することができます。他の方法は、挿入を制限するためにMySQLデータベースを呼び出すコードを変更することです – umlcat

答えて

4

何か作業をする必要があります:

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

- 追加:// DEV:ユーザーIDは= xyzの

+0

残念ながら、これはMySqlでは動作しません。 このバージョンのMySQLはまだ 'LIMIT&IN/ALL/ANY/SOMEサブクエリ'をサポートしていません。 –

+0

以下はサブクエリの構文が若干異なりますが、選択のためのものですdelete:http://stackoverflow.com/questions/2856397/mysql-subquery-limit –

+0

そのサブクエリーに*ない*の行を追加したいので、ID <> subquery.IDに参加する必要があります –

0
DELETE from table 
WHERE id NOT IN(
     SELECT id FROM table GROUP BY userid ORDER BY logintime DESC LIMIT 10) 
関連する問題