我可以在MySQL WHERE INTERVAL select中使用列值吗

时间:2019-05-05 19:54:30

标签: mysql timestamp where-clause

我有一个系统,可以按设定的频率检查网站上的某些数据。每个网站在crawl_frequency列中都有自己的检查频率。此值以天为单位。

我有一张这样的桌子

CREATE TABLE `websites` (
    `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    `domain` VARCHAR(191) NOT NULL COLLATE 'utf8mb4_unicode_ci',
    `crawl_frequency` TINYINT(3) UNSIGNED NOT NULL DEFAULT '3',
    `last_crawled_start` TIMESTAMP NULL DEFAULT NULL,
    PRIMARY KEY (`id`)
)

我想运行查询以查找新网站以指定的检查频率/间隔进行检查。目前,我有一个查询,如果将网站的crawl_frequency设置为一天,该查询就可以正常工作。

SELECT domain
FROM websites
WHERE last_crawled_start <= (now() - INTERVAL 1 DAY)
LIMIT 1

MySQL查询中有任何方法可以为crawl_frequency子句中的每一行使用WHERE列中的值。

所以我想做个例子:

SELECT domain
FROM websites
WHERE last_crawled_start <= (now() - INTERVAL {{INSERT VALUE OF CRAWL FREQUENCY FOR THIS PARTICULAR WEBSITE}} DAY)
LIMIT 1

3 个答案:

答案 0 :(得分:2)

您可以尝试使用DATEDIFF函数,如下所示:

SELECT domain FROM websites
WHERE DATEDIFF(NOW(), last_crawled_start) > crawl_frequency
LIMIT 1;

答案 1 :(得分:2)

您可以这样做:

function boo(target: object, propertyKey: string) {
    console.log("boo");
}

class A {

    @boo
    private str: string | null = null;

    constructor() {
        this.str = "test";
    }

}

是的,真的。

答案 2 :(得分:1)

我为mysql阅读的所有内容都说它不能是变量,但是您可以使用其他函数,例如

SELECT * FROM websites 
WHERE 
  (unix_timestamp() - unix_timestamp(last_crawled_start))/86400.0 > crawl_frequency