如何在日期范围内获取行?

时间:2015-01-05 09:02:29

标签: php mysql

我对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          

虽然每天使用此查询记录不能分开。 请帮帮我..等待你的回复!

2 个答案:

答案 0 :(得分: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))  

答案 1 :(得分:0)

试试这个

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天的记录,它使用内置函数NOW()DATE_SUB()的mysql。