2016-09-15 52 views
0

我試圖從5到10分鐘前添加的數據庫中獲取所有行。在PHP/MySQL中獲取日期之間的結果

這是我曾嘗試:

$query9 = mysql_query("SELECT * FROM user_actions WHERE timestamp BETWEEN date_sub(now(), interval 5 minute) AND date_sub(now(), interval 10 minute);"); 

$onlineUsersLast10Mins = mysql_num_rows($query9); 

儘管6,7,8和9分鐘前其數據庫中的數據,這個腳本不撿不起來。我哪裏錯了?

的信息,日期被存儲在通常的格式YYYY-MM-DD HH時間戳:MM:SS

+0

看來,左側的間隔之間大於右側。如果你交換他們,這是否運作良好? –

+0

對不起你是什麼意思 – Shane

+0

我會寫一個答案,我試圖澄清你的問題並解釋解決方案。忍受我:) –

回答

1

需要刪除在查詢結束的最後一個雙引號前的分號:

$query9 = mysql_query("SELECT * FROM user_actions WHERE timestamp BETWEEN date_sub(now(), interval 10 minute) AND date_sub(now(), interval 5 minute)"); 

這應該有效。

+0

嗨,不幸的是,這並沒有改變...? – Shane

+0

嗨,做了一個編輯,也是你的間隔需要有進一步回溯到日期的時間--->見這裏http://stackoverflow.com/questions/9926147/mysql-how-to-use-date-子在子句之間, –

0

讓我們來看看BETWEEN's documentation

BETWEEN作品的一個區間,但如果你看看這個官方的例子:

的mysql> SELECT 2 1和3之間,2之間3和1;

- > 1,0

你會看到,2是1和3之間,但2是不是和1之間3所以,如果右側比左側大,像第二種情況,其中3是左邊,1是右邊,那麼你的元素將不會在它們之間。

因此,2是1和3之間,但2是不是和1之間3

讓我們來看看你的查詢:

SELECT * FROM user_actions WHERE timestamp BETWEEN date_sub(now(), interval 5 minute) AND date_sub(now(), interval 10 minute); 

左側包含的時刻比現在早5分鐘,右側比現在早10分鐘。所以,右側實際上比左側更早(更小)。我們需要看到我們是否有在10分鐘前5分鐘前值,而不是周圍的其他方式:)

所以,這應該是查詢:

SELECT * FROM user_actions WHERE timestamp BETWEEN date_sub(now(), interval 10 minute) AND date_sub(now(), interval 5 minute); 
相關問題