2

我是 php 和 mysql 编程的新手,我在处理日期方面有一个问题。

有一个日期字段,将日期存储在表中

例如2013-05-27, 2013-05-24, 2013-05-22

我需要检索最近3天的数据进行进一步处理,首先是定位今天的日期,如果找不到,则定位昨天的数据,如果找不到,则定位前一天的数据等。然后我有以下代码:

$date1=date('Y-m-d');
$date1_1="";
$datefound="";
while( $datefound <> ""){
    $date1_1_1 = mysql_query("SELECT * FROM jom_c1 where date ='" .$date1. "'");
    if($date1_1_1){
    $datefound = $date1;
}else{
    $date1 = date('Y-m-d', strtotime($date . ' - 1 day'));
}
}
echo $datefound; 
?>

但是,似乎循环没有运行,如果有人能给我一个提示,非常感谢。

4

3 回答 3

5

您可能要考虑正确使用 SQL,即

select * from jom_c1 where date <= curdate() order by date desc limit 3

而不是循环。

(您的循环运行不多,因为一旦找到日期,它就会停止)

于 2013-05-26T16:40:42.220 回答
0

如果您正在寻找有记录的最新日期,请jom_c1尝试以下查询:

SELECT * FROM jom_c1 WHERE date <= CURDATE() ORDER BY date DESC LIMIT 1

如果您要查找最近的三个日期,请使用LIMIT 3而不是LIMIT 1.

PHP 代码如下所示:

$datefound = "";
$result = mysql_query('SELECT * FROM jom_c1 WHERE date <= CURDATE() ORDER BY date DESC LIMIT 1');
if ($result && mysql_num_rows($result) > 0) {
    $row = mysql_fetch_assoc($result);
    $datefound = $row['date'];
}
echo $datefound;

但是请注意,mysql_query推荐使用


编辑: 如果一天有多条记录,则使用以下查询:

SELECT DISTINCT date FROM jom_c1 WHERE date <= CURDATE() ORDER BY date DESC LIMIT 1

Distinct 将忽略重复的记录。

于 2013-05-26T16:51:49.067 回答
0

while 块未执行的原因是您设置$datefound=""但您的条件是while ($datefound<>"").

于 2013-05-26T16:48:54.083 回答