2010-10-30 30 views
0
$result = mysql_query("SELECT * FROM users_msgs WHERE uID = '$USER' AND date<'$lastmsg' AND date BETWEEN $Yday AND $today ORDER by date DESC LIMIT 10"); 

即時得到0行,而應該有1 ..PHP:過濾相同的列兩次查詢

但我的其他查詢,

$result = mysql_query("SELECT * FROM users_msgs WHERE uID = '$USER' AND date > $today 
AND date<'$lastmsg' 
ORDER by date DESC LIMIT 10"); 

工作正常,並且還過濾相同列兩次?

那麼,我的第一個查詢是什麼問題?

+0

你能顯示一些表格內容嗎?在你的第一個查詢中''Yday'和'$ today'之間有'date',但在第二個查詢中'date> $ today'。這是矛盾的嗎?順便說一句:你應該用「mysql」來標記問題。它與php無關。 ;) – Flinsch 2010-10-30 18:23:43

+0

第二個查詢是從今天輸出消息。第一個是昨天,這是行不通的。 – Johnson 2010-10-30 18:26:56

回答

0

這兩個查詢使用不同的條件來篩選date列。

這都需要date$lastmsg少,但第一個查詢(你說不行)要求date也大於或等於$Yday或小於或等於$today。第二個查詢要求date大於$today。過濾是相反的。

列上有多個過濾條件沒有問題 - 您只需要讓數據滿足要求即可獲得結果。

+0

第二個查詢是從今天輸出消息。第一個是昨天的信息,它不起作用,所以你說的第一個信息沒有錯? – Johnson 2010-10-30 18:34:52

+0

@Johnson:沒有語法錯誤 - 只是檢查數據是否滿足要查找的內容。在$ * Yday之後有$ lastmsg作爲日期*的機會,這可能會排除您認爲應該看到的記錄。 – 2010-10-30 18:39:13

+0

你好。謝謝,只是發現這是因爲另一個記錄我認爲我會看到與$ lastmsg相同的日期,然後它沒有顯示,有沒有辦法解決這個問題? – Johnson 2010-10-30 19:01:07

0

如果日期的類型爲DATE,DATETIME或TIMESTAMP(它應該是,如果它不是),那麼你必須把你的變量簡單的引號之間:date BETWEEN '$Yday' AND '$today'

確保您的變量包含值你認爲它們包含。此外,您可以測試您的查詢是否返回錯誤:mysql_query('...') or exit(mysql_error());

+0

即時存儲unix時間戳日期應該是什麼類型? – Johnson 2010-10-30 18:30:48

+0

它不會返回任何錯誤 – Johnson 2010-10-30 18:31:44

+0

如果它不返回任何錯誤,不理我的帖子(好吧,不是列類型: - p),問題是你的變量包含什麼。要麼它不是真的,或者你的變量是關閉的。此外,您應該使用DATE/DATETIME/TIMESTAMP的原因很多:人類可讀的日期,能夠使用日期函數,更易於使用等。您可以閱讀這篇文章以獲取更多信息:http://stackoverflow.com/questions/ 2948494/unix-timestamp-vs-datetime – 2010-10-30 18:39:10

相關問題