2013-08-29 76 views
0

快速在這裏,我試圖選擇兩個時間戳之間的所有記錄。當前時間和接受日期。接受的日期是UNIX時間戳。我試圖從名爲「messages」的表中選擇記錄,並且每個記錄的UNIX時間戳都在「time」列中。在兩個時間戳之間獲取記錄MySql

這是查詢之一,我已經試過

$query = " SELECT * FROM `messages` WHERE `user_id` = $id \n" 
. "And `time` between \"(UNIX_TIMESTAMP($timestamp)\" And UNIX_TIMESTAMP(NOW()) "; 

它似乎並沒有被返回給我任何東西。我嘗試了很多不同的變化。我也試過這 - $時間戳是UNIX格式..

$query = " SELECT * FROM `messages` WHERE `user_id` = $id \n" 
. "And `time` between $timestamp And UNIX_TIMESTAMP(now()) "; 

我敢肯定這件事情昭然若揭,將非常感激某些輸入!

+0

爲什麼你有一個換行符('\ n')嵌入在那裏? –

+0

這是我從PhpMyAdmin獲得的輸出,它將SQL查詢轉換爲PHP – robobobobo

回答

1

我會通過獨立運行調試此:

SELECT `user_id`, `time`, 
     UNIX_TIMESTAMP($timestamp) AS ts_from, UNIX_TIMESTAMP(NOW()) AS ts_to 
    FROM `messages` 

...以確認數據類型和值是您預期的。您可能需要嵌入一個$ timestamp作爲文本值的示例來隔離測試SQL。

還有一種可能性,即計算$timestamp對數據庫服務器使用不同的時區設置。取決於這些消息記錄的最近時間,這可能是一個因素。

UPDATE

的問題是在這裏混合鑄造。 UNIX_TIMESTAMP(x)需要DATETIME並將其轉換爲UNIX時間戳。還有一個反函數FROM_UNIXTIME(x)takes a UNIX timestamp and converts it to a DATETIME

在謂詞子句time BETWEEN x AND y中,所有3個參數需要是相同的類型。

因此,假設您的time列包含DATETIME,我覺得你只是想:

$query = "SELECT * FROM `messages` WHERE `user_id` = $id " 
     . "And `time` between FROM_UNIXTIME($timestamp) And NOW() "; 

在另一方面,如果time是UNIX時間戳:

$query = "SELECT * FROM `messages` WHERE `user_id` = $id " 
     . "And `time` between $timestamp And UNIX_TIMESTAMP(NOW()) "; 
+0

感謝您的輸入RET,我嘗試過測試該SQL語句,但我收到了一個錯誤,並且沒有任何價值。如果有任何幫助,我在Joomla中這樣做。 在您的查詢中,我似乎無法找出什麼 'AS ts_to'的意思。 我很確定$ timestamp格式正確,當我回聲它看起來像這樣「1377648000」。 我已經能夠得到這個日期正常工作,我似乎無法理解時間戳的不同語法! – robobobobo

+0

查看我的更新回答。我可以看到發生了什麼,現在你已經提供了一個'$ timestamp'包含的例子。 – RET

+0

啊,真是太棒了!感謝大家,這是我需要的第二個選項,將NOW()時間轉換爲UNIX時間戳 – robobobobo

相關問題