2010-10-30 47 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