1

我有一个由记录发生在硬件上的事件的驱动程序填充的表,当客户端应用程序正在执行特殊过程(例如维护)时,在此操作期间保存的事件是由于用户而不是由 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* 并只获取 event* 行,有没有一种方法可以简单地查询信息,以获取变量和非统一的范围集?

谢谢

编辑:我想我不清楚,服务器上运行了两个应用程序,我的基于 php 的 Web 应用程序和一个外部驱动程序。两个脚本/应用程序访问同一个数据库,驱动程序插入来自传感器和其他硬件状态的数据,Web 应用程序读取数据并显示一些非常漂亮的图形(它在用户请求中插入“信号”行,即单击按钮)。只是无法通过比较来确定事件是来自维护还是来自正常操作,因为它们是相同的,区别在于技术人员是否单击网页上的一个按钮开始,以及完成时单击另一个按钮。我需要的是问Mysql:“嘿,只要给我那些不在field1 = 1(开始)的行和另一个field1 = 2(结束)的行之间的行。考虑到'

我想我正在采用 php 重构表格的方式,在围绕结果集循环的开始/结束行之间的数据中添加一个额外的列。然后提出我的查询。

4

2 回答 2

0

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

SELECT * FROM table WHERE  fieldlist LIKE 'event?'
于 2013-10-09T03:59:47.547 回答
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... |

在这里拉小提琴。

于 2013-10-09T04:46:57.120 回答