I'm trying to delete specific rows in multiple log tables, for activity that is > 5 days old. but want to keep the log activity if the visitor_id is found in log_customer.
the following returns over 42 K rows:
SELECT *
FROM `log_url` , `log_url_info`, `log_visitor_info`, `log_visitor`
WHERE `log_url`.`visit_time` <= NOW( ) - INTERVAL 5
DAY
AND `log_url`.`url_id` = `log_url_info`.`url_id`
AND `log_url`.`visitor_id` = `log_visitor`.`visitor_id`
AND `log_url`.`visitor_id` = `log_visitor_info`.`visitor_id`
AND `log_url`.`visitor_id` NOT IN ( select `log_customer`.`visitor_id` from `log_customer` )
However, this returns the sql 1064 error:
DELETE
FROM `log_url` , `log_url_info`, `log_visitor_info`, `log_visitor`
WHERE `log_url`.`visit_time` <= NOW( ) - INTERVAL 5
DAY
AND `log_url`.`url_id` = `log_url_info`.`url_id`
AND `log_url`.`visitor_id` = `log_visitor`.`visitor_id`
AND `log_url`.`visitor_id` = `log_visitor_info`.`visitor_id`
AND `log_url`.`visitor_id` NOT IN ( select `log_customer`.`visitor_id` from `log_customer` )
Error messages:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'WHERE log_url.visit_time
<= NOW( ) - INTERVAL 5 DAY AND log_url.url_id' at line 3
I also get ...
#1064 - You have an error in your SQL syntax; check the manual that corresponds to
your MySQL server version for the right syntax to use near 'WHERE log_url.visit_time
<= STR_TO_DATE('2014-08-21 10:00:00', '%Y-%m-%d %H:' at line 3
...if I replace NOW()
... with <= STR_TO_DATE( '2014-08-21 10:00:00', '%Y-%m-%d %H:%i:%s' )
Shouldn't that be...
DELETE `log_url` , `log_url_info`, `log_visitor_info`, `log_visitor`
FROM `log_url` , `log_url_info`, `log_visitor_info`, `log_visitor`
WHERE `log_url`.`visit_time` <= NOW( ) - INTERVAL 5 DAY
AND `log_url`.`url_id` = `log_url_info`.`url_id`
AND `log_url`.`visitor_id` = `log_visitor`.`visitor_id`
AND `log_url`.`visitor_id` = `log_visitor_info`.`visitor_id`
AND `log_url`.`visitor_id` NOT IN ( select `log_customer`.`visitor_id` from log_customer` )
or even...
DELETE u
, ui
, vi
, v
FROM log_url u
JOIN log_url_info ui
ON ui.url_id = u.url_id
JOIN log_visitor_info vi
ON vi.visitor_id = u.visitor_id
JOIN log_visitor v
ON v.visitor_id = u.visitor_id
WHERE u.visit_time <= NOW( ) - INTERVAL 5 DAY
AND u.visitor_id NOT IN ( SELECT visitor_id FROM log_customer)