私がこのテーブルを持っている場合:
+------+-------+---------------+--------+-----------------+------------+-----------+----------------+------+------+--------+------------+------------+
| type | class | username | userid | userip | usermobile | useremail | daysleft| pin1 | pin2 | pin3 | active | schoolname | schoolsite |
+------+-------+---------------+--------+-----------------+------------+-----------+----------------+------+------+--------+------------+------------+
| B | A | sebbetest | 1000 | 123.123.123.123 | none | none | 50| 0 | 0 | 0 | Y | none | none |
| A | A | stackowerflow | 5355 | 123.123.123.123 | none | none | 50| 0 | 0 | 0 | Y | none | haha |
| C | A | good | 4223 | 123.123.123.124 | none | none | 50| 0 | 0 | 0 | Y | none | haha |
| A | A | tester | 6353 | 123.123.123.125 | none | none | 50| 0 | 0 | 0 | Y | none | haha |
| B | A | admin | 3453 | 123.123.123.125 | none | none | 50| 0 | 0 | 0 | Y | none | eeee |
| A | A | sebastian | 1342 | 123.123.123.126 | none | none | 50| 0 | 0 | 0 | Y | none | eeee |
| C | A | username | 6456 | 123.123.123.125 | none | none | 50| 0 | 0 | 0 | Y | none | woooooow |
+------+-------+---------------+--------+-----------------+------------+-----------+----------------+------+------+--------+------------+------------+
ご覧のとおり、IP「123.123.123.124」のユーザー「good」とIP「123.123.123.126」のユーザー「sebastian」には「コンパニオン」がなく、同じIP上の他のユーザーもいません。
ユーザー「sebbetest」には、コンパニオン「stackowerflow」があります。
ユーザー「tester」には、「admin」と「username」の2つのコンパニオンがあります。
ここで、コンパニオンが不足しているこれらのユーザーを削除したいと思います。どうすればいいですか?アトミックな理由と、同時アクセスによるデータベースの変更を防ぐために、SQLの単一の式ですべての「非コンパニオン」ユーザーを削除したいと思います。
私は次のように試しました:DELETE FROM lan WHERE COUNT(userip)= 1;
これを取得しました:エラー1111(HY000):グループ関数の使用が無効です
重複する行はありません。IPに関係なくエントリが一意であるかどうかを確認する必要がある場合、(タイプ、ユーザーID)は一意です。
つまり、IPが連続して一意である場合は、それを削除します。