2011-07-06 61 views
3

我有以下查詢從我的表中返回所有行:從MySQL返回行不到60天

$query="SELECT * FROM $tbl_name ORDER BY job_id DESC"; 

我想用條目少於60天,以限制那些結果。我使用以下數據記錄了數據庫中的日期:

$dt=date('d M Y'); 

並且它存儲在名爲'date'的列中。

有人可以幫我修改我的查詢嗎?

感謝 丹

+1

http://dev.mysql.com/doc/refman/5.1/zh/date-and-time-functions.html – hakre

+0

@hakre感謝您的鏈接和編輯:) – Dan

回答

4
$query="SELECT * FROM $tbl_name WHERE DATEDIFF(CURDATE(), STR_TO_DATE(date,'%d %M %Y')) <60 ORDER BY job_id DESC" 
+0

謝謝,但可悲的是,這不是'不工作。它不會返回錯誤,但它不會過濾結果。難道是因爲當CURDATE是YYYY MM DD格式時,我以'd M Y'格式存儲數據? – Dan

+0

你是否將日期存儲在日期字段或varchar中? –

+0

我最後的編輯應該工作,只要你把你的日期作爲一個字符串存儲在數據庫中(在varchar或文本字段中) –

0

試試這個(未經測試)

SELECT * FROM $tbl_name WHERE date >= DATE_SUB(CURDATE(), INTERVAL 60 DAY) ORDER BY job_id DESC 
+0

謝謝但如上所述,可悲的是,這不是加工。它不會返回錯誤,但它不會過濾結果。難道是因爲當CURDATE是YYYY MM DD格式時,我以'd M Y'格式存儲數據? – Dan

4

如果日期存儲像數據庫中的VARCHAR,您的查詢應該是:

SELECT * 
FROM $tbl_name 
WHERE TO_DATE(date, 'dd MON yyyy') >= DATE_SUB(CURDATE(), INTERVAL 60 DAY) 
ORDER BY job_id DESC 

如果日期像日期一樣存儲,使用:

SELECT * 
FROM $tbl_name 
WHERE date >= DATE_SUB(CURDATE(), INTERVAL 60 DAY) 
ORDER BY job_id DESC 
2
SELECT * FROM $tbl_name FROM_UNIXTIME(date) >= DATE_SUB(CURDATE(), INTERVAL 60 DAY) ORDER BY job_id DESC 
0

您可以使用作爲

select b.mobile_number, max(b.bill_number), max(b.created_on), c.name from MasterBill as b, MasterCustomer as c WHERE b.created_on < NOW() - INTERVAL 60 DAY and b.mobile_number = c.mobile_number group by mobile_number; 

認爲手機號碼是客戶主和計費鍵綁定數據。