2013-12-22 34 views
1

我想根据datetime_lastactive以及如果IP地址与您自己的IP地址匹配,使用一个SQL查询从两个表中删除数据。但我发现了此错误消息时,我尝试了下面的SQL查询:使用INNER JOIN从两个表中删除数据

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[42000]: Syntax error or access violation: 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 'INNER JOIN visitors_main WHERE information_ipaddress = '123.123.123.123' A' at line 2' in ...

DELETE FROM visitors_list 
INNER JOIN visitors_main 
WHERE information_ipaddress = :ipaddress 
AND datetime_lastactive < NOW() - INTERVAL 3 HOUR 

的表是这样的:

CREATE TABLE IF NOT EXISTS `visitors_list` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `id_visitor` int(10) DEFAULT '0', 
    `id_user` int(10) DEFAULT '0', 
    `data_filename` text NOT NULL, 
    `data_filename_get` text NOT NULL, 
    `data_useragent` text NOT NULL, 
    `datetime_lastactive` datetime NOT NULL, 
    `information_ipaddress` text NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`) 
) 

CREATE TABLE IF NOT EXISTS `visitors_main` (
    `id` int(10) NOT NULL AUTO_INCREMENT, 
    `id_user` int(10) DEFAULT '0', 
    `data_coordinates` varchar(25) NOT NULL, 
    `datetime_firstvisit` datetime NOT NULL, 
    `checkbox_anonymous` tinyint(4) DEFAULT '0', 
    `checkbox_tiecoordinates` tinyint(4) DEFAULT '0', 
    `checkbox_nogps` tinyint(4) DEFAULT '0', 
    `information_ipaddress` text NOT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `id` (`id`) 
) 

我怎样才能使这项工作?

+0

尝试使用反勾对表名。 – Mihai

+0

谢谢,但没有解决问题。我得到了同样的错误信息 – Erik

+0

在WHERE之前使用ON条件。 – Mihai

回答

1

试试这个:

DELETE l, m 
FROM visitors_list AS l 
INNER JOIN visitors_main AS m ON l.information_ipaddress = m.information_ipaddress 
WHERE l.information_ipaddress = :ipaddress 
AND l.datetime_lastactive < NOW() - INTERVAL 3 HOUR; 
+0

谢谢!但是,我只得到'致命错误:带有消息'SQLSTATE [23000]的未捕获的异常'PDOException':违反了完整性约束:1052'...'中的where子句中的列'information_ipaddress'不明确。为什么'删除visitors_list'?我不想删除整个表格。只是其中的数据(也在visitor_main中) – Erik

+0

@ErikEdgren - 这是因为两个表之间的外键约束,您可以使其“CASCADE DELETE”从另一个表中删除。但是,你想从两个表中删除还是只从其中一个删除? –

+0

我想从两个表中删除具有相同IP地址的数据。 – Erik

0
DELETE v1,v2 
FROM visitors_list v1 
INNER JOIN visitors_main v2 ON v1.id_visitor = v2.id 
WHERE v1.information_ipaddress = :ipaddress 
AND v1.datetime_lastactive < NOW() - INTERVAL 3 HOUR; 
+0

致命错误:带有消息'SQLSTATE [42S22]的未捕获异常'PDOException':未找到列:1054未知列'visitors_list.information_ipaddress'in'whe '...'中的're'子句 – Erik