[英]Query data from table based of entries in another table
因此标题可能有些混乱,但是很难用几句话来描述问题。 因此,我现在有两个重要的表:
CREATE TABLE IF NOT EXISTS `private_crawler_urls` (
`id` int(11) NOT NULL,
`url` text NOT NULL,
`hash` varchar(47) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB AUTO_INCREMENT=100 DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `private_crawler_url_checks` (
`id` int(11) NOT NULL,
`url_id` int(11) NOT NULL,
`created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
`total_proxies` int(11) NOT NULL,
`working_proxies` int(11) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=78 DEFAULT CHARSET=latin1;
现在,我想从选择所有的URL private_crawler_urls
那里是在没有进入private_crawler_url_checks
比一个给定的时间跨度(如10分钟)更新。 这就是我现在所拥有的:
SELECT
u.id, u.url, c.created_at
FROM
private_crawler_urls u
INNER JOIN
private_crawler_url_checks c ON (c.url_id = u.id)
WHERE
c.created_at < NOW() - INTERVAL 10 MINUTE
ORDER BY c.created_at ASC
问题是,这不能正常工作,因为我不想删除private_crawler_url_checks
的旧条目,因此即使表中有一个新条目,也总是存在比给定Timespan更长的条目。 由于我刚接触MySQL,所以我不知道如何完成此操作,因此需要您的帮助。 谢谢! 如果您需要更多信息,请发表评论!
我认为这将使您保留旧记录,而不会干扰您的愿望。 但是,关于性能影响的不确定性尚不确定:
SELECT
pcu.url
FROM
private_crawler_urls as pcu
WHERE
pcu.id NOT IN (
SELECT
pcuc.url_id
FROM
private_crawler_url_checks as pcuc
WHERE
pcuc.created_at > DATE_SUB(NOW(), INTERVAL 10 MINUTE)
)
首先,它选择所有url_id
,最后10分钟内有一个created_at
。 之后,它将选择id
不在此列表中的所有url
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.