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]