2012-04-14 76 views
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,這意味着我在檢查它的差異沒有被發現?

+0

很多代碼是缺少我想...什麼是$結果? – skyline26 2012-04-14 17:04:11

+0

是的,我得到0.我試圖得出時間之間的差異,或者如果差異超過2個小時,我會得到某種假或真的差異。 – Roland 2012-04-14 17:04:50

+0

@toPeerOrNotToPeer - '$ result'是var我綁定的結果,但我不確定會發生什麼。 – Roland 2012-04-14 17:06:00

回答

3

Mysql的IF是這樣工作的:

IF(condition, true, false) 

您在結果revceive 0 「人數超過」 這意味着

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

是假的,換句話說timeDiff測量比02小: 00:00

+0

這就是我想聽到的,所以可以這樣做嗎?我甚至可以刪除那個'AS'? – Roland 2012-04-14 17:07:21

+1

有幾種方法可以做到這一點,你的就是其中之一;)是的,AS不是必需的。 – 2012-04-14 17:18:52

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查詢返回的干係數即可。

+0

+1我不想重寫它,它已經像我以前那樣工作了,我需要確認它實際上做了我認爲它的工作:)並感謝您的提示,我會嘗試您的方法看到結果。 – Roland 2012-04-14 17:20:04

+0

@Roland小心點。在答案中,我告訴你,你的查詢沒有做你想做的事情:)爲了使它更清楚:它將需要一個*隨機*行並檢查它是否滿足條件並返回1或0。這幾乎就像翻轉一枚硬幣。 – 2012-04-14 17:24:27

+0

但是,這是事情,我檢查它在所有行中是相同的值,所以如果在任何行中遇到超過2小時的差比我需要更新所有信息。 – Roland 2012-04-14 17:30:40