我有一个数据库,存储日期为Unix时间戳(即1369763646)
要获取特定日期的数据,我必须首先检索数组中的所有数据,然后使用PHP日期函数循环以分隔特定的日期结果。
$today = date("Y-m-d");
$collect = array();
foreach($data as $row)
{
$date = date("Y-m-d",$row['date']);
if($date == $today)
$collect[] = $row;
}
有没有办法只从时间戳检索特定日期的数据而不用像单个查询那样将所有数据都放入数组中。
SELECT * FROM table WHERE date = '28-05-2013';
答案 0 :(得分:2)
在您的查询中使用FROM_UNIXTIME
和DATE
:
SELECT * FROM table WHERE DATE(FROM_UNIXTIME(date)) = '2013-05-28';
答案 1 :(得分:1)
在查询中使用from_unixtime()
:
SELECT *
FROM table
WHERE SUBSTRING_INDEX(FROM_UNIXTIME(date), ' ', 1) = '28-05-2013'
这会将您的日期字段从时间戳转换为日期格式(28-05-2013 22:13:02)。然后SUBSTRING_INDEX()
将检索日期字段的第一部分(28-05-2013),您可以在下一部分使用标准的WHERE子句:)
答案 2 :(得分:0)
虽然这不是你要求的,但你可以做一个
$timestamp = mktime(0,0,0,5,28,2013);
将您想要的日期作为时间戳,然后使用
运行查询答案 3 :(得分:0)
试试这个吗?
$start = strtotime( '2013-05-28 00:00:00' );
$end = strtotiem( '2013-05-28 23:59:59' );
$sql = "SELECT * FROM table WHERE date BETWEEN {$start} and {$end}";
from_unixtime
可能会更好,但这会将时间戳计算留给PHP,我更倾向于这样做,因为这可能会降低查询速度