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

MysqlIFは次のように機能します。

IF(condition, true, false)

結果「以上」で0を受け取るということは、

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

はfalseです。つまり、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

クエリは、実際にはテーブル製品から行を非決定論的に取得し (これは、どの行を予測できないかを意味します)、条件に一致するかどうかを確認します。一致する場合、クエリは を返し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 に答える