使用自定义日期字符串从PHP中的MySQL获取最近24小时的数据

使用自定义日期字符串从PHP中的MySQL获取最近24小时的数据,php,mysql,date,datetime,time,Php,Mysql,Date,Datetime,Time,我正在使用向数据库添加自定义日期字符串 $date = date("H:i:sa | d-m-Y"); $sql = "INSERT INTO data (artist, title, presenter, timeplayed) VALUES('$artist','$title','$presenter','$date')"; 然而,我不能完全弄清楚如何把$date拿回来,只有最后24小时的条目。从昨天的00:00到今天的23:59:59 我试过: SELEC

我正在使用向数据库添加自定义日期字符串

$date = date("H:i:sa | d-m-Y");
$sql = "INSERT INTO data
        (artist, title, presenter, timeplayed)
        VALUES('$artist','$title','$presenter','$date')";
然而,我不能完全弄清楚如何把$date拿回来,只有最后24小时的条目。从昨天的00:00到今天的23:59:59

我试过:

SELECT * FROM data WHERE timeplayed > DATE_SUB( NOW(), INTERVAL 24 HOUR)
与此类似的是,它带回了超过24小时的数据


我将数据存储在TimePlay中,以varchar的形式播放。我想知道这是否是原因?

根据以上评论,您应该将数据保存为正确的mysql日期格式,要获取过去24小时的数据,您可以使用从
NOW()减去的日内时间()


根据上面的评论,您应该将数据保存为正确的mysql日期格式,要获取过去24小时的数据,您可以使用从
NOW()减去的当天时间(


由于自定义日期,您唯一的救世主是以下查询:

$sql = "SELECT * FROM data WHERE timeplayed LIKE '%".date("d-m-Y")."'";

随着表的增长,这将产生可怕的性能…

由于自定义日期,您唯一的救星是此查询:

$sql = "SELECT * FROM data WHERE timeplayed LIKE '%".date("d-m-Y")."'";

随着表的增长,这将产生可怕的性能…

我认为您应该重新考虑您的方法。MySQL中的所有
Date
函数都是面向它所期望的格式的。在表示层中执行此操作要容易得多,因为:

echo日期('H:i:sa | d-m-Y',strottime($row['timeplayed']);


这将允许您按预期使用所有MySQL函数。

我认为您应该重新考虑您的方法。MySQL中的所有
Date
函数都面向它所期望的格式。在表示层中这样做会容易得多,因为:

echo日期('H:i:sa | d-m-Y',strottime($row['timeplayed']);

这将允许您按预期使用所有MySQL函数。

为什么不试试:

$from_date = date("Y-m-d", strtotime("2013-12-11"))." 00:00:00";
$to_date = date("Y-m-d", strtotime("2013-12-12")." 11:59:59";

select * from data where timeplayed <= $to_date and timeplayed >= $from_date
$from_date=日期(“Y-m-d”,标准时间(“2013-12-11”))“00:00:00”;
$to_date=日期(“Y-m-d”,标准时间(“2013-12-12”)“11:59:59”;
选择*from data,其中timeplayed=$from\u date
为什么不试试:

$from_date = date("Y-m-d", strtotime("2013-12-11"))." 00:00:00";
$to_date = date("Y-m-d", strtotime("2013-12-12")." 11:59:59";

select * from data where timeplayed <= $to_date and timeplayed >= $from_date
$from_date=日期(“Y-m-d”,标准时间(“2013-12-11”))“00:00:00”;
$to_date=日期(“Y-m-d”,标准时间(“2013-12-12”)“11:59:59”;
选择*from data,其中timeplayed=$from\u date

为什么要将日期存储为非标准格式?您应该在表示层进行格式化,让MySQL按原意处理日期。我认为您无法将自定义数据字符串与普通数据字符串进行比较,现在您知道了为什么将日期存储为非标准格式字符串是不好的idea@RobM.因为我不会飞我们在展示层格式化了,我很忙…看起来这让我很恼火,我应该看看那部分,嗯…为什么你要用非标准格式存储日期?你应该在展示层格式化,让MySQL处理日期。我不认为你可以比较您可以将数据字符串自定义为普通数据字符串,现在您知道了为什么将日期存储为非标准格式字符串是一个糟糕的选择idea@RobM.因为我无法理解表示层的格式,所以我很匆忙…看起来它让我很不舒服,我可能应该看看那部分,嗯…好吧-我在MySQL中将它改为datetime现在插入now(),效果很好。只需要让这一位工作起来。目前正在做;
foreach($key=>row1作为$value){echo'',$value',;}
有什么想法吗?:/用句号替换逗号,你应该可以开始了:
foreach($key=>row1作为$value){echo'.$value';}
Sorry-意思是说我正在做
while($row1=mysql\u fetch\u row($result2)){
foreach。所以,我没能弄清楚如何处理日期和strotime!你能告诉我是新来的吗?:)
如果($key=='timeplayed'){echo'.date('H:I:sa | d-m-Y',strotime($value['timeplayed'])。)
在你的
foreach
中。不用担心,我们都是新来的:)谢谢。我按照他们的思路,但奇怪的是,它只做表中的第一列,而不是实际的timeplay列,即使在说else执行通常的$value(并有趣地将文本转换为时间!哈哈)。开始了!好的-我在MySQL中将它改为datetime,现在使用now()插入,效果很好。只需要让这一点起作用。目前正在做;
foreach($key=>row1 as$value){echo',$value,;}
有什么想法吗?:/用句点替换逗号,你应该可以开始了:
foreach($ROW1AS$key=>$value){echo'.$value'.';}
抱歉-意思是说我在做
而($row1=mysql_fetch_row($result2)){
然后是foreach。所以,我没能弄清楚如何处理日期和strotime!你能告诉我有点新吗?:)
如果($key='timeplayed'){echo'.date('H:I:sa | d-m-Y',strotime('value['timeplayed')))“;}
在你的
foreach
中。不用担心,我们都是新来的:)谢谢你。我是按照他们的思路做的,但奇怪的是,它做的是表中的第一列,而不是实际的timeplay列,即使在说了else之后执行通常的$value(并有趣地将文本转换为时间!哈哈)。到达那里!