2012-06-26 24 views
4

我在我的MySQL數據庫中有事件,至少有一個日期。當我在將來執行SQL查詢以獲取所有事件時,出現錯誤...雖然事件的日期是將來的。當我更改我的SQL請求以選擇過去的日期時,我將從未來獲得這些日期...
以下SQL語句已運行,但因某種原因它停止工作...生活在過去的數據庫?

我使用此SQL要求:

$sql = "SELECT * FROM calendar WHERE date >= CURDATE() order by `date`"; 

我得到一個空數組作爲結果...
但是如果我更改查詢到這一點,我得到我的數據庫中的所有事件:

$sql = "SELECT * FROM calendar WHERE date <= CURDATE() order by `date`"; 

這是我的數據庫d ATA。在我看來,所有的數據都在未來... enter image description here

date表的格式是默認的日期類型:
enter image description here

當我問我的服務器有關的時間echo date("Y-m-d");我得到今天的日期結果...

那麼我在哪裏犯了一個錯誤?

+0

我認爲你必須使用DATE_DIFF。也許我錯了,但我認爲在firts的情況下mysql比較像一個字符串 – ZigZag

+0

'<= CURDATE()'以前工作過,所以我不明白爲什麼我必須切換... – Michiel

+1

你確定你的mysql是在與您的網絡服務器相同的機器上?因爲你粘貼了PHP代碼。嘗試SELECT CURDATE();代替。 – jishi

回答

0

在您進行查詢,運行此一個:

SET time_zone = '-2:00'; // or whatever your time zone is. 
+0

我不確定我是否可以得到您的答案...我必須用我的time_zone更新我的SQL查詢?我將來如何獲得這些活動? – Michiel

+4

我看到值2013年 - 我不認爲這個問題在時區 – ZigZag

+0

@ZigZag我同意 – SuperMykEl

1

得到一個空集是沒什麼意思是找到匹配。我會看看你的日期格式。我唯一想的另一件事是它比較一個不匹配的類型,所以只返回一個空集。

+0

我插入數據通過使用PHP MyAdmin用戶界面,所以我想這是一個正確的值... – Michiel

1

使用DATEDIFF:

DATEDIFF

WHERE DATEDIFF(日,CURDATE)> 0

2

您可檢查錯誤的日期字段。你有創建的日期以及預定日期嗎?

我可能會因爲感冒而吃藥,但是你的日期表不可能是你的日曆項目的日期,id字段只是一個int(2),這似乎是一種小。

+0

我只有一個列('日期')...爲什麼不能是我的日曆項目的日期?並且id表的結構有什麼問題? – Michiel

+0

這裏只是猜測,因爲這是我查看結構的唯一表格,但如果這是您日曆的日期字段,則id字段位於大小爲2的int上,這意味着您將只能輸入99條記錄在它開始有重複的關鍵錯誤之前。 – SuperMykEl

+0

沒關係!最多計劃79個記錄的限制! – Michiel

2

也許簡單些?我注意到表中的列名是date,它也是返回日期時間值的日期部分的函數date()的名稱。如果是這種情況

$sql = "SELECT * FROM calendar c WHERE c.`date` <= CURDATE() order by `date`"; 

會做的伎倆。即使不是mysql本身,你使用的GUI應用程序(看起來像phpmyadmin)可能會感到困惑。

(順便說一句,你忘了的date收盤蜱在order by子句)

+0

好的。我也錯過了。 – SuperMykEl

+0

這是我第一次猜測之後沒有觸及mysql一段時間,唉,這不是問題 - 測試。 – Louis

+0

之前已經測試過,夥計們。沒有工作。 – Cranio

0

不要問我如何或爲何,但我已經被截斷我的表並重新插入一些數據,我查詢似乎工作得很好:

$sql = "SELECT * FROM `calendar` WHERE `date` >= CURDATE() order by `date`"; 

因此,儘管該問題似乎被截斷我的表來解決,我想知道答案的爲什麼,問題...任何人都可以提供給我嗎?