我有这个代码,它允许我检索有关该信息的时间戳等于另一个日期的所有信息。
以下是代码:
$information="SELECT * FROM scheda_anagrafica WHERE FROM_UNIXTIME('time_inserted','%d-%m-%Y') = '" . $giorno_selcted. "'
";
$result1 = mysql_query($information) or die (mysql_error());
while( $row = mysql_fetch_array($result1)) {
echo $row['information1'];
}
giorno_selected打印的内容如下:25-09-2012 我在这做错了什么? 谢谢!
答案 0 :(得分:0)
首先,你不应该在where子句中使用运算符左侧的mysql函数。这样mysql需要读取磁盘上的完整表来计算要比较的值,而不是优化查询速度和资源使用情况(IO,cpu)。
从您的问题和评论我明白,您正在查询数据库中与$giorno_selected
表示的字符串相同的行。因此,您需要在该特定日期找到时间戳介于0:00到23:59之间的所有行:
$giorno_timestamp_start = date_create_from_format('d-m-Y', $giorno_selected)->getTimestamp();
$giorno_timestamp_end = $giorno_timestamp_start + 86399; //add almost all seconds per day onto the start timestamp
$information="SELECT * FROM scheda_anagrafica WHERE time_inserted BETWEEN " . $giorno_timestamp_start. " AND ". $giorno_timestamp_end;
$result1 = mysql_query($information) or die (mysql_error());
while( $row = mysql_fetch_array($result1)) {
echo $row['information1'];
}
如果您的time_inserted
列的类型为integer
并且包含unix_timestampds,则此方法有效。
如果类型为datetime
或timestamp
,则需要修改查询,如下所示:
$information="SELECT * FROM scheda_anagrafica WHERE time_inserted BETWEEN FROM_UNIXTIME(" . $giorno_timestamp_start. ") AND FROM_UNIXTIME(". $giorno_timestamp_end .")";