服务器上次关闭时的MySQL查询以检索记录

问题描述

|| 这是我的MysqL表。
+-----------------+-------------------+------+----------+---------------------+
| server_check_id | server_service_id | time | error_id | created             |
+-----------------+-------------------+------+----------+---------------------+
|           57532 |                 1 |  226 |        1 | 2011-06-18 16:08:44 |
|           57489 |                 1 |  236 |        1 | 2011-06-18 16:03:29 |
|           57446 |                 1 |  229 |        1 | 2011-06-18 15:58:15 |
|           57403 |                 1 |  377 |        1 | 2011-06-18 15:52:57 |
|           57360 |                 1 |  232 |        1 | 2011-06-18 15:47:42 |
|           57317 |                 1 |  216 |        1 | 2011-06-18 15:42:27 |
|           57274 |                 1 |  227 |        1 | 2011-06-18 15:37:10 |
|           57231 |                 1 |  327 |        1 | 2011-06-18 15:31:47 |
|           57145 |                 1 |  232 |        1 | 2011-06-18 15:18:27 |
|           57102 |                 1 |  238 |        1 | 2011-06-18 15:13:12 |
|           57059 |                 1 |  210 |        1 | 2011-06-18 15:07:46 |
|           57016 |                 1 |  227 |        1 | 2011-06-18 15:02:31 |
|           56973 |                 1 | 1001 |        2 | 2011-06-18 14:55:45 |
|           56930 |                 1 | 1000 |        2 | 2011-06-18 14:49:44 |
|           56887 |                 1 |  237 |        1 | 2011-06-18 14:44:28 |
|           56844 |                 1 |  232 |        1 | 2011-06-18 14:39:14 |
|           56801 |                 1 |  229 |        1 | 2011-06-18 14:33:59 |
|           56758 |                 1 |  233 |        1 | 2011-06-18 14:28:43 |
|           56715 |                 1 |  225 |        1 | 2011-06-18 14:23:28 |
|           56672 |                 1 |  224 |        1 | 2011-06-18 14:18:14 |
|           56629 |                 1 |  223 |        1 | 2011-06-18 14:12:56 |
|           56586 |                 1 |  229 |        1 | 2011-06-18 14:07:42 |
|           56543 |                 1 |  246 |        1 | 2011-06-18 14:02:28 |
|           56500 |                 1 |  260 |        1 | 2011-06-18 13:57:10 |
|           56457 |                 1 |  207 |        1 | 2011-06-18 13:51:56 |
|           56414 |                 1 |  235 |        1 | 2011-06-18 13:46:41 |
|           56371 |                 1 |  222 |        1 | 2011-06-18 13:41:25 |
|           56328 |                 1 |  230 |        1 | 2011-06-18 13:36:10 |
|           56285 |                 1 |  218 |        1 | 2011-06-18 13:30:55 |
|           56242 |                 1 |  219 |        1 | 2011-06-18 13:25:38 |
+-----------------+-------------------+------+----------+---------------------+
error_id
1表示正在工作,而2表示其没有工作。 现在,我想弄清楚我的服务上次不能使用多长时间。为了进一步说明,我想让最近的记录具有
error_id
1的最近记录与之前的记录具有
error_id
2的所有记录之间的持续时间紧随所有带有
error_id
2的记录,直到前一个记录具有
error_id
1的记录。希望它有意义。 考虑到上述数据,我想获得record6ѭ的记录之间的持续时间56930至57016 我可以使用PHP中的多个for循环来完成此操作,但我想知道是否可以使用1或2个简单的MySQL查询。 请指教。     

解决方法

        伪代码:
1) $last_err_id =  SELECT `server_check_id` FROM `table` WHERE `error_id` = \'2\' ORDER BY `created` DESC LIMIT 0,1

2) $prev_work_id = SELECT `server_check_id` FROM `table` WHERE `error_id` = \'1\' AND `server_check_id` < $last_err_id ORDER BY `created` DESC LIMIT 0,1

3) $start_err_time = SELECT `created` FROM `table` WHERE `error_id` = \'2\' AND `server_check_id` > $prev_work_id ORDER BY `created` DESC LIMIT 0,1

4) $start_work_time = SELECT `created` FROM `table` WHERE `error_id` = \'1\' AND `server_check_id` > $last_err_id ORDER BY `created` DESC LIMIT 0,1
结果将在$ start_work_time和$ start_err_time之间。