运行此代码会发生什么?

时间:2012-04-14 16:58:02

标签: php mysql

我正在运行这段代码:

$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,这意味着找不到我正在检查的差异?

2 个答案:

答案 0 :(得分:3)

Mysql IF的工作原理如下:

IF(condition, true, false)

你在结果中收到0“更多”,这意味着

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

是假的,换句话说,dateiff小于02:00:00

答案 1 :(得分:2)

您只需删除IF

即可重写查询
SELECT (TIMEDIFF(NOW(),last_update) > '02:00:00') morethan FROM products LIMIT 1

您的查询实际上会非确定地从表格产品中获取一行(这意味着您无法预测哪一行),并检查它是否与您的条件匹配。如果是,则查询将返回1,否则返回0。我想那不是你的意图,对吗?

如果要检查是否有任何符合该条件的行,您可以执行此操作:

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

只要找到匹配项,这将返回1,如果找不到匹配项,则返回空结果集。您甚至不需要检查返回的值,因为您可以使用mysql_num_rows计算查询返回的intem数量。