需要PHP/MySql的帮助。需要选择所有“今天”的记录。
我的表中有一个列保存了Unix时间戳,我只想从表中选择Unix时间戳等于今天的记录。
愿意在Linux命令行上执行此操作,只需要基本的MySql查询语句即可。
我会选择SQL版本:
SELECT * FROM table WHERE DATE(timestamp_field) = CURDATE();
以下是正确的做法:
WHERE `date` BETWEEN UNIX_TIMESTAMP(DATE(NOW())) AND UNIX_TIMESTAMP(DATE(DATE_ADD(NOW(), 1 DAY)))
WHERE `date` >= UNIX_TIMESTAMP(DATE(NOW()))
当你将date
字段类型更改为datetime
时,可能的查询将是:
WHERE `date` >= DATE(NOW())
当我说“正确”时,我是指这些查询可以通过使用索引进行优化。而像DATE(order_time) = DATE(NOW())
这样的查询则不能,因为它是对字段的表达式。
既然您标记了PHP,我将提供PHP答案:
list ( $y, $m, $d ) = explode('.', date('Y.m.d'));
$today_start = mktime(0, 0, 0, $m, $d, $y);
$today_end = mktime(23, 59, 59, $m, $d, $y);
// do the query with this clause:
// ... WHERE unix_timestamp BETWEEN $today_start AND $today_end
'
或 "
包裹起来,例如 date('Y.m.d')
。 - RobertPittSELECT * FROM table_name WHERE DATE(date) = DATE(NOW())
SELECT * FROM orders WHERE DATE(order_time) = DATE(NOW())
CAST( FROM_UNIXTIME( <your_field> ) AS DATE ) = CURDATE( )
SELECT * FROM tbl WHERE date >= CURDATE()
CURDATE()
或CURRENT_DATE
而不是DATE(NOW())
。 - wimvds