我有表log
,因为我有一个列Message
,它存储日志信息。消息将包含一些事件ID和日志描述
所以我想阅读具有不同事件ID的所有不同消息。
我尝试了什么
select distinct message from log limit 100;
我收到所有不同的消息,但使用相同的事件ID'
下一步
select * from log where
message not like "%1177%" and
message not like "%609%" and
message not like "%82%" and
message not like "%1107%" and
message not like "%23%"
order by ID DESC limit 10;
在获取日志后,我必须再次添加一行以获取下一个唯一的事件ID,如果我有23并想要获得其他23我必须添加message not like "%23%"
以获取23以外的消息这个查询的大小会越来越大。
那么如何编写一个查询,选择具有不同事件ID的不同消息?
修改
Field | Type | Null | Key | Default | Extra |
+--------------------+------------------+------+-----+---------+----------------+
| ID | int(10) unsigned | NO | PRI | NULL | auto_increment |
| FromHost | varchar(60) | YES | | NULL | |
| Message | text | YES | | NULL | |
**edit**
示例消息
1177|Malformed DNS Packet|12-2-15
1177|Malformed DNS Packet|11-2-15
1177|Malformed DNS Packet|11-1-15
609|IDP Prevention Alert|12-2-15
609 | IDP预防警报| 11-1-15
输出
1177|Malformed DNS Packet|12-2-15
609|IDP Prevention Alert|11-1-15
答案 0 :(得分:1)
select * from log where group by message,eventID
此查询将根据唯一消息和eventIDs
返回日志答案 1 :(得分:1)
在标准SQL中,这将是:
SELECT
SUBSTRING(message FROM 1 FOR POSITION('|' IN message) -1) AS EventID
,MAX(message)
FROM tab
GROUP BY
SUBSTRING(message FROM 1 FOR POSITION('|' IN message) -1)
如果您不需要在结果中显示EventId,则可以将其删除。
在MySQL中,SUBSTRING / POISITION可以替换为SUBSTRING_INDEX(你可能也不需要MAX):
SUBSTRING_INDEX(message, '|', 1)
答案 2 :(得分:0)
SELECT DISTINCT id, message
FROM "yourTable" GROUP BY id
这应该明确地返回id和消息。
答案 3 :(得分:0)
您可以使用MIN()
或MAX()
函数实现这一目标,因为您的ID
具有唯一message
。{/ p>
SELECT MIN(ID),message FROM log GROUP BY message
或
SELECT MAX(ID),message FROM log GROUP BY message