MySQL SELECT不包括几个范围

时间:2013-10-09 03:49:33

标签: mysql

我有一个表,由驱动程序记录在硬件上发生的事件填充,当客户端应用程序执行特殊程序(比如manteinance)时,在此操作期间保存的事件是由用户而不是I / O(传感器和东西),处理这个,因为我需要保存所有可能的事件(通过正常操作或用户操作发生)。 我需要能够过滤那些“维护模式”数据并获取自动生成的信息,为了做到这一点,我在硬件填充的表中插入“START”和“END”行,儿子我可以知道什么时候非功能性数据开始及结束的地方,如下所示:

id | fieldlist... 
---+--------------------
 1 | event1 
 2 | event2 
 3 | event3 
 4 | manteinance start (inserted by me)
 5 | event_by_technician1 
 6 | event_by_technician2
 7 | event_by_technician3
 8 | manteinance finish (inserted by me)
 9 | event4 
 10| event5 
 11| manteinance start (inserted by me)
 12| event_by_technicianx 
 13| event_by_techniciany
 14| manteinance finish (inserted by me)
 15| eventA 
 16| manteinance start (inserted by me)
 17| event_by_technician 
 18| manteinance finish (inserted by me)
 19| many many more records and start/finish pairs...

我需要过滤所有那些event_by_technician *并只获取事件*行,有没有办法查询信息干净简单,对于可变和非均匀的范围集?

由于

编辑:我想我不清楚,有两个应用程序在服务器上运行,我的基于PHP的Web应用程序和外部驱动程序。两个脚本/应用程序都访问同一个数据库,驱动程序从传感器插入数据和其他硬件状态,并且Web应用程序读取并显示一些非常漂亮的图形(它在用户请求上插入“信令”行,即点击一个按钮)。通过比较来确定一个事件是来自manteinance还是来自正常操作是不可能的,因为它们是相同的,如果技术人员点击网页上的一个按钮开始,另一个完成后,它们的区别是什么。 我需要的是问Mysql:“嘿,只要给我一行不是在一行之间的行,其中field1 = 1(开始),另一行则是field1 = 2(结束)。考虑到结果中有很多开始/结束对

我认为我正在采用php重构表的方式,在循环结果集的开始/结束行之间为数据添加一个额外的列。然后提出我的疑问。

2 个答案:

答案 0 :(得分:0)

你可以使用LIKE和'?'替换一个字符。例如:

SELECT * FROM table WHERE  fieldlist LIKE 'event?'

答案 1 :(得分:0)

使用用户定义的函数应该是最有效的方法。你可以这样做:

SELECT id, event FROM (
    SELECT id, event,
      @manteinance := (@manteinance_started OR @manteinance) AND event != 'manteinance finish' m,
      @manteinance_started := event = 'manteinance start' ms
    FROM t, (SELECT @manteinance := FALSE, @manteinance_started := FALSE) init
    HAVING m = 0
    ORDER BY id
) s
WHERE event NOT IN ('manteinance start', 'manteinance finish')

<强>输出:

| ID |                                            EVENT |
|----|--------------------------------------------------|
|  1 |                                           event1 |
|  2 |                                           event2 |
|  3 |                                           event3 |
|  9 |                                           event4 |
| 10 |                                           event5 |
| 15 |                                           eventA |
| 19 | many many more records and start/finish pairs... |

小提琴here