如何获取日期范围内的行


How to fetch the rows with in a date range?

我对php中的sql查询有疑问。在登录期间,当前日期以及时间被覆盖到存储在数据库中的"strtotime"。注销时间也输入到数据库中。一个人一天可以登录多次。

我想列出每个用户最近 7 天的登录时间(每个用户每天分别列出)。我使用了以下查询

"SELECT a.user_id, b.username, a.clock_in,a.clock_out , DATEDIFF(a.clock_in,a.clock_out) FROM " . DB_PREFIX . "clock_history a left join " . DB_PREFIX . "user b on a.user_id=b.user_id   WHERE clock_in between '".$prestrtime."' and '".$curren."' and clock_status=0 and b.status=1  ORDER BY id DESC "

表格格式如下

id  user_id     clock_in    clock_out   clock_status
1   1           1419829200   1419829800     0
2   2           1419829200   1419851689     0
3   1           1419851633   1419851677     0          

虽然每天使用此查询记录无法分离。请帮助我..等待您的回复!

您可以从 MYSQL 查询计算过去 7 天,如下所示

SELECT a.user_id, b.username, a.clock_in,a.clock_out , 
DATEDIFF(FROM_UNIXTIME(a.clock_in),FROM_UNIXTIME(a.clock_out)) 
FROM " . DB_PREFIX . "clock_history a 
left join " . DB_PREFIX . "user b on a.user_id=b.user_id   
WHERE clock_in between UNIX_TIMESTAMP(date_sub(now(),INTERVAL 1 WEEK)) and UNIX_TIMESTAMP(now())
and clock_status=0 and b.status=1  
ORDER BY id DESC 

更新 DATE_DIFF()函数使用两个日期而不是时间戳,因此使用FROM_UNIXTIME()函数将时间戳转换为日期

DATEDIFF(a.clock_in,a.clock_out) 

#it return days, if you need hours then `/24` of total days
DATEDIFF(FROM_UNIXTIME(a.clock_in),FROM_UNIXTIME(a.clock_out))  

试试这个

SELECT a.user_id, b.username, a.clock_in,a.clock_out, 
DATEDIFF(FROM_UNIXTIME(a.clock_in), FROM_UNIXTIME(a.clock_out)) as days 
FROM " . DB_PREFIX . "clock_history a 
LEFT JOIN " . DB_PREFIX . "user b on a.user_id=b.user_id   
WHERE clock_in BETWEEN UNIX_TIMESTAMP(DATE_SUB(NOW(), INTERVAL 7 DAY)) 
    AND UNIX_TIMESTAMP(NOW())
AND clock_status=0 AND b.status=1  
ORDER BY id DESC

这将为您提供过去 7 天的记录,它使用 mysql 的内置函数NOW()DATE_SUB()