2015-01-22 1 views
-1

Я снова, ребята. Заголовки довольно понятны, но для деталей: Я хочу отображать результаты timediff (в часах) на веб-странице, но я не могу окунуться в голову, как это сделать. Я использую PHP и Codeigniter для этого сайта. До сих пор у меня есть базы данных MySQL с таблицей под названием «server_log», который выглядит как:Показать результат TIMEDIFF в результате запроса mySQL на веб-страницу

+--------+-----------+--------+---------+------------+-------------+ 
| log_id | host_name | status | host_id | profile_id | event_date | 
+--------+-----------+-+----------------+------------+-------------+ 
| 1 | http://...| Online | 1  |  1  | *timestamp* | 
+--------+-----------+--------+---------+--------------------------+ 

* Это показывает также другие записи со статусом «Offline» и «Техническое обслуживание».

У меня есть этот запрос, чтобы получить данные для каждого пользователя (на основе profile_id) ж/с, также сортируются по статусу ('Online', 'Offline', или 'Maintenance'):

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 - это результаты веб-страницы, которые позволяют пользователю выбирать дату «От» и «Кому» для фильтрации результатов, таких как страница отчета. Проблема заключается в том, что после указанного выше запроса я не знаю, что мне еще нужно, чтобы рассчитать результаты TIMEDIFF для каждого сервера (host_id), а затем отобразить их на веб-странице. (Я хотел бы получить 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

TIMEDIFF означает разное время между event_date и сейчас? –

+0

Я не совсем * броский *, который вы обновили? –

+0

Добавлено более подробно выше, @Colour Dalnet –

ответ

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'; 

- EDIT -

Это логика вы хотите?

$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; 
} 
+0

@Lehandro: Вы пробовали это? –

+0

Сообщение обновлено ^. Я пробовал это, но получаю пустой результат. Вот почему я поставил проблему здесь, чтобы получить экспертные мнения. –

+0

@LehandroZharos: Вы имели в виду разные события event_date в миллисекундах? и каковы критерии? возможно, вы можете написать формулу, например: 'TIMEDIFF = event_date [log_id] - event_date [log_id - 1]' –

Смежные вопросы