Hi,

I wonder if someone can help me with the following simple(?) MySQL
problem.

I have a table 'action' with about 180,000 web server requests records
running under 
MySQL Ver 14.7 Distrib 4.1.12 (Fedora Core 4)

mysql>desc action
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int(11)      |      | PRI | NULL    | auto_increment |
| host_ip     | varchar(16)  |      |     |         |                |
| file        | varchar(255) |      |     |         |                |
| querystring | varchar(255) | YES  |     | NULL    |                |
| timestamp   | datetime     | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
5 rows in set (0.00 sec)

>From this table, I must delete all records associated with host_ips that
occur only once in the table (all unique host_ips).

I have tried the following approaches; all of which hang the server and
corrupt the table:

Method 1: First create a 'totals' table that holds for each host_ip the
number of occurrences in the 'action' table:

mysql> create table totals as select host_ip, count(*) as hits
       from action
       group by host_ip
       order by hits;

Next, combine the tables in a query (a 'select' for now, but a 'delete'
eventually):

mysql> select from action where host_ip in
       (
         select host_ip
         from totals
         where hits = 1
       );

Method 2: use an explicit join:

mysql> select host_ip
       from action, totals
       where action.host_ip = totals.host_ip
       and totals.hits = 1;

Method 3: don't use the 'totals' table at all:

mysql> select host_ip
       from action
       group by host_id having count(*) = 1;

As mentioned, none of these work and all of these hang the server and
break the database.

How do I do this?

--
MySQL General Mailing List
For list archives: http://lists.mysql.com/mysql
To unsubscribe:    http://lists.mysql.com/[EMAIL PROTECTED]

Reply via email to