我想根据内容的时间戳来检索内容。我的查询是
SELECT link,title,timestamp,photo,link,author,comments FROM posts
WHERE timestamp='*Todays Date -1*' LIMIT 6
如果查询返回零行,如何使用while语句查询2天前或3天前的结果?
为什么不查询完整的表(没有时间戳过滤器)并返回6行的限制。在这种情况下,没有理由迭代查询
SELECT link,title,`timestamp`,photo,link,author,comments
FROM posts
ORDER BY `timestamp` DESC
LIMIT 6
这将为您提供最多6条记录,并首先返回最近的记录。您应该对此查询的timestamp
字段有索引,这是可以的,因为您应该已经有了索引,因为您以前试图对此字段进行筛选。
如果您遇到的情况是,在最后一天内显示的行数超过3行,并且您不需要显示前几天的记录,那么通过在循环结果集时检查值就可以很容易地实现这一点。
如果数据库中只有2条记录,这也可以防止您进入无限循环。
还要注意,timestamp
是一个保留字,在使用此类字段名称时应小心。如果必须使用保留字作为字段名,则必须用反引号将其括起来。
也许for可以工作
$i=1
for ($row='';$count=0;$i++) {
$result = mysql_query("SELECT link,title,timestamp,photo,link,author,comments FROM posts WHERE timestamp='*Todays Date -$i *' LIMIT 6");
$count = mysql_num_rows($result);
}
我认为您想要的查询既过滤结果又排序。
SELECT link, title, timestamp, photo, link, author, comments
FROM posts
WHERE timestamp <= '*Todays Date -1*'
ORDER BY timestamp desc
LIMIT 6;
如果您实际上想要3行而不是6行(正如文章标题所建议的那样),那么将6
更改为3
。