2013-12-09 47 views
0

我用下面的語句從MySQL表中選擇值:CURDATE()不工作的十二月

$a = mysqli_query($con, "SELECT * FROM list WHERE inserted_on<=DATE_SUB(CURDATE(), INTERVAL 0 DAY)"); 
while($row = mysqli_fetch_array($a)) 
    { //do something... 
     } 

但是查詢跳過這是從十二月的結果(12個月)...

的inserted_on行看起來像這樣(舉例):

2013-12-04 17:50:34 //edited so that it reflects an actual example 
year-month-date hour:minute:second 

任何想法,爲什麼...也許一個解決問題的辦法?

+2

你使用的是date_sub,然後減去任何東西? –

+0

'2013:12:23'不是有效的日期時間值。它應該是'yyyy-mm-dd hh:mm:ss'(注意日期中的破折號)。如果你沒有比較本地mysql日期/時間值,那麼你正在進行STRING比較,所有投注都關閉。 –

+0

@John Conde ...我忘了它那裏...我曾經使用另一種語法..但後來我修改它,我離開那個DATE_SUB那裏是錯誤的... – SpiderLinked

回答

0

我會試着根據留下的評論嘗試一下。

我不知道你需要確切的結果,但無論是這些就足夠了:

SELECT * FROM list WHERE DATE(inserted_on) <= CURDATE(); 

OR

SELECT * FROM list WHERE inserted_on <= NOW(); 

第二個是從運行的角度,特別是如果一個更好的解決方案你的日期被編入索引。

編輯:

請注意我在這裏做的。

在第一次自CURDATE()僅返回2013-01-01作爲例子,並且您的字段正在返回一個時間戳,然後檢查00:00:00和23:59:59之間的所有時間,我基本上是說get我只有我的inserted_on字段的日期,並將其與curdate()進行比較。

在第二個我說現在()這將是這個帖子的日期/時間2013-12-09 10:54:19我將它與您的格式表格中的時間戳2013- 01-01 00:00:00(作爲例子)。

+0

我會嘗試更改爲now()以查看是否會有任何改變... – SpiderLinked

+0

仍然無法正常工作...:| – SpiderLinked

+1

請在您的問題上點擊編輯,並提供您在表格中的確切日期,以及在您的anser中顯示的日期,但不應該。這個查詢應該適合你。 – Shawn

0

鑑於此示例代碼,根據您的例子,它的工作原理與我的期望(使用MySQL版本5.0.51b-community-nt,但這是不太可能的事情):

DROP TABLE IF EXISTS `test`.`list`; 
CREATE TABLE `test`.`list` (
    `id` int(10) unsigned NOT NULL auto_increment, 
    `inserted_on` datetime NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

INSERT INTO list VALUES(null, '2013-12-04 17:50:34'); 
INSERT INTO list VALUES(null, '2013-12-23 17:50:34'); 

後來,當我執行查詢:

SELECT * FROM list WHERE inserted_on <= DATE_SUB(CURDATE(), INTERVAL 0 DAY); 

或:

SELECT * FROM list WHERE inserted_on <= CURDATE(); 

甚至,例如:

SELECT * FROM list WHERE inserted_on <= DATE_SUB(CURDATE(), INTERVAL 1 DAY); 

結果是:

| id | inserted_on   | 
+----+---------------------+ 
| 1 | 2013-12-04 17:50:34 | 

...如預期。

所以,你的代碼中一定還有其他東西在發生,我們並不知道。例如:

  • 您是否肯定該行實際存在?
  • 你使用什麼數據類型爲列inserted_on(即使文本列也應該正常工作)
  • 你使用的是什麼版本的MySQL?

進一步的問題:

  • 當你確切的mysqli_query(...)後做了var_dump($a);立即撥打你有什麼是$a價值?是false
  • 什麼是當你不使用PHP的結果集,但一些MySQL管理工具來直接查詢數據庫?那麼是否給出預期的結果集?
+0

回答你的帖子:是的,我是,timestamp(CURRENT_TIMESTAMP),我真的不知道...是的,我知道它應該工作...這就是爲什麼我問什麼可能是問題... – SpiderLinked