2017-05-17 61 views
0

我有一個列(lastlogin),它包含以下value = '17th May 2017 09:40:43 AM' ----MYSQL - 日期/時間顯示最後30分鐘

PHP函數來創建戳記:

date('jS F Y h:i:s A'); 

我怎樣才能做一個選擇查詢顯示當前時間最近30分鐘內的(lastlogin)?

我想我們必須將日期/時間轉換爲字符串,並將2分開?

任何幫助將是驚人的。

UPDATE:

我試過以下,但在表中沒有工作的返回的記錄更aless:

SELECT user_id, ('lastlogin' >= DATE_FORMAT(NOW() - INTERVAL 30 MINUTE,'%D %M %Y %H:%m:%s %p')) as result 
    FROM login_last 
    where lastlogin >= DATE_FORMAT(NOW() - INTERVAL 30 MINUTE,'%D %M %Y %H:%m:%s %p') 
    GROUP BY user_id 

表結構

[id] int(8) 
    [user_id] int(11) 
    [lastlogin] varchar(30) 
    [browser] varchar(300)  
+0

做一個比較,你要麼需要COMPA重新設置爲將「正確排序」的日期時間類型或格式化日期時間。它存儲爲字符串還是日期時間/時間戳? –

+0

存儲爲字符串 – memaxt

+0

您可以顯示您的表格架構(__用info__編輯您的問題)嗎?爲了提供答案,我需要知道涉及的表名和列名。 –

回答

1

您需要將您的字符串日期轉換爲datetime格式比較,那麼當前日期時間比作存儲值。

您也可以將它們轉換爲可排序字符串進行比較。類似於「2017-05-17 10:20:10 AM」,但使用日期時間類型比較更容易。

參考:

MySQL查詢:

SELECT 
    `user_id`, 
    `last_login`, 
    (STR_TO_DATE(`lastlogin`,'%D %b %Y %h:%i:%s %p') >= (NOW() - (INTERVAL 30 MINUTE))) as `in_range` 
FROM `login_last` 
WHERE (STR_TO_DATE(`lastlogin`,'%D %b %Y %h:%i:%s %p') >= (NOW() - (INTERVAL 30 MINUTE))) 
+0

爲什麼投票反對?如果你打算投反對票,至少提供一個原因,這樣人們可以改進他們的答案。 –

+0

這工作..向你!不得不改變last_login lastlogin ...你再次感謝我的投票! – memaxt

+0

很高興它的工作,不客氣!我也更新了正確的列名 –

0
SELECT * FROM tablename WHERE lastlogin >= DATE_SUB(NOW(), INTERVAL 30 MINUTE); 

查爾斯enge是將DATE_SUB(NOW(), INTERVAL 30 MINUTE)的結果轉換爲正確的格式'17th May 2017 09:40:43 AM'(或將您的lastLogin的左側條件格式化爲UNIX_TIMESTAMP/datetime)。如果你自己插入日期值,你可能已經知道如何獲得這種格式,並可以自己完成。否則,我建議您創建一個新的問題,即將UNIX_TIMESTAMP格式化爲您所需的格式。

,而無需嘗試的機會盲的猜測,在我的將是:

SELECT * FROM tablename 
WHERE UNIX_TIMESTAMP(lastlogin) >= DATE_SUB(NOW(), INTERVAL 30 MINUTE); 
+0

不幸的是,這沒有奏效返回ZERO行 – memaxt

+0

使用該格式將無法正確比較,因爲它是一個字符串,並且該格式無法正確比較。 –

相關問題