我再次,伙计们。这些标题非常明显,但细节如下: 我想在网页上显示timediff(以小时为单位)的结果,但我无法理解如何做到这一点。 我在这个网站上使用PHP和Codeigniter。 到目前为止,我有一个mySQL数据库,其中有一个名为'server_log'的表,如下所示:
+--------+-----------+--------+---------+------------+-------------+
| log_id | host_name | status | host_id | profile_id | event_date |
+--------+-----------+-+----------------+------------+-------------+
| 1 | http://...| Online | 1 | 1 | *timestamp* |
+--------+-----------+--------+---------+--------------------------+
*它还显示状态为“离线”和“维护”的其他条目。
我有这个查询来获取每个用户的条目(基于profile_id)w / c也按状态排序('在线','离线'或'维护'):
SELECT * FROM server_log
WHERE (profile_id=$id AND status='Online')
AND event_date BETWEEN $from_date AND $to_date
ORDER BY event_date,host_id;
* from_date和to_date是网页的结果,用户可以选择“发件人”和“收件人”日期来过滤结果,例如报表页面。 我遇到的问题是,在上面的查询后,我不知道我需要什么,以便计算每个服务器(host_id)的TIMEDIFF结果,然后在网页上显示它们。 (我想在获取每个状态的查询结果后获得结果之间的TIMEDIFF ) 如何获得TIMEDIFF结果(整数)?
简单地说,我希望流程是这样的:
[1] After 1st query: (SELECT ALL 'Online' for $id)
log_id | host_name | status | host_id | profile_id | event_date
1 ping.test1 Online 1 2 **
2 ping.test1 Online 1 2 **
3 ping.test2 Offline 2 2 **
4 ping.test2 Offline 2 2 **
[2] After 2nd query: (loop for each host_id)
log_id | host_name | status | host_id | profile_id | event_date
1 ping.test1 Online 1 2 **
2 ping.test1 Online 1 2 **
-> then calculate diff_date of event_dates
---> then return value to be assigned to $data['reports_ping']
-----> back to [1] but selecting all 'Offline', then 'Maintenance'
-------> if all values are assigned, display $data['reports_ping'] as row (foreach)
我希望结果显示如下:
+------------+------------+------------+-------------+-------------+
| profile_id | host_name | online_hrs | offline_hrs | maintenance |
+------------+------------+------------+-------------+-------------+
| 1 | http://... | 2 | 1 | 0 |
+------------+------------+------------+-------------+-------------+
我是一个相对初学者而且对CodeIgniter并不是那么好,所以对此的任何帮助都会非常感激。提前谢谢!
答案 0 :(得分:0)
TIMEDIFF意味着event_date和现在之间的时间不同?试试这个:
SELECT *, (event_date - NOW()) as TIMEDIFF FROM server_log
WHERE (profile_id=$id AND status='Online')
AND event_date BETWEEN $from_date AND $to_date
ORDER BY 'event_date','host_id';
- 编辑 -
这是你想要的逻辑吗?
$temp = null;
foreach($rows){
$event_date = "select event_date from server_log order by log_id LIMIT 1"; // specify this query using your CI format
$timediff = $event_date - $temp;
$temp = $event_date;
}