0

我正在运行这段代码:

$sql = "SELECT IF(TIMEDIFF(NOW(),last_update) > '02:00:00',1,0) AS morethan FROM products LIMIT 1";

    if($stmt = $this->connect->prepare($sql)) {
        $stmt->execute();
        $stmt->bind_result($result);
        $stmt->fetch();
        $stmt->close();
    } else {
        return false;
    }

    return $result;

我明白0了,这意味着我正在检查的差异没有找到?

4

2 回答 2

3

Mysql IF 的工作原理是这样的:

IF(condition, true, false)

您在结果“超过”中收到 0 这意味着

TIMEDIFF(NOW(),last_update) > '02:00:00'

为假,换句话说 timediff 小于 02:00:00

于 2012-04-14T17:05:07.213 回答
2

您可以重写您的查询,只需删除IF

SELECT (TIMEDIFF(NOW(),last_update) > '02:00:00') morethan FROM products LIMIT 1

您的查询实际上会不确定地从表 products 中获取一行(这意味着您无法预测哪一行)并检查它是否符合您的条件。如果是,则查询将返回1,否则返回0。我想这不是你的本意,对吧?

如果您想检查是否有任何行满足该条件,您可以这样做:

select 1 existsInTable from products
where TIMEDIFF(NOW(),last_update) > '02:00:00'
limit 1

这将在找到匹配项时返回1,当未找到匹配项时返回空结果集。您甚至不需要检查返回的值,因为您只需计算查询返回的整数个数mysql_num_rows

于 2012-04-14T17:10:08.397 回答