来自日志表的mysql查询

时间:2011-03-18 06:34:19

标签: mysql

我有一张这样的表

CREATE TABLE `filelog` (
  `date_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `file` varchar(200) DEFAULT NULL,
  `action` varchar(10) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1

操作可以包含值'upload'和'delete'

我有一个列表视图,其中显示上传的文件以供删除。问题是可以删除同一个文件并再次上传多次,这是一个日志表,其中插入了所有这些操作。因此,查询应显示带有操作“上传”的文件,其中最近的操作“删除”发生在“上传”操作之前。

2 个答案:

答案 0 :(得分:1)

听起来您的要求在逻辑上等同于

“显示每个给定文件的最新条目IFF最近的条目是上传”

这是对的吗?如果是的话......

SELECT F1.*
FROM filelog F1
WHERE F1.action = 'upload' AND F1.date_time =
          SELECT max(F2.date_time)
          FROM filelog F2
          WHERE F2.file = F1.file

如果从来没有删除权,你仍然想要它吗?

答案 1 :(得分:0)

试试这个:

SELECT * 
FROM   filelog f 
       JOIN (SELECT FILE, 
                    max(date_time) 
             FROM   filelog 
             WHERE  ACTION = 'delete' 
             GROUP  BY FILE) d 
         ON d.FILE = f.FILE 
            AND d.date_time < f.date_time 
WHERE  ACTION = 'update' 

这将读取派生表中文件的最新删除。并用这些加入外表。

你需要索引

  • (文件,DATE_TIME)