繁体   English   中英

根据另一个表中的条目从表中查询数据

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM