我有以下files
表,其中存储多个用户的文件(该表仅显示 1 个用户的文件)。
+--------+----------+----------+------------------------------+
| fileID | fileName | folderID | userID | uploadDate |
+--------+----------+----------+--------+---------------------+
| 1 | file1 | 1 | 1 | 2014-02-03 12:00:00 |
| 2 | file2 | 2 | 1 | 2014-01-05 12:00:00 |
| 3 | file3 | 3 | 1 | 2014-01-08 12:00:00 |
| 4 | file4 | 2 | 1 | 2014-01-04 12:00:00 |
| 5 | file5 | 1 | 1 | 2014-01-07 12:00:00 |
| 6 | file6 | 3 | 1 | 2014-01-09 12:00:00 |
+--------+----------+----------+--------+---------------------+
我想按日期查找每个文件夹最新上传的文件。 结果应该是这样的...
+--------+----------+----------+------------------------------+
| fileID | fileName | folderID | userID | uploadDate |
+--------+----------+----------+--------+---------------------+
| 2 | file2 | 2 | 1 | 2014-03-05 12:00:00 |
| 5 | file5 | 1 | 1 | 2014-03-07 12:00:00 |
| 6 | file6 | 3 | 1 | 2014-03-09 12:00:00 |
+--------+----------+----------+--------+---------------------+
有什么建议吗?
最佳答案
啊,用 SQL 来做这件事出乎意料的困难。我对此的最佳解决方案是创建一个临时表,然后加入它:
创建表表1
(fileID
int, fileName
varchar(5), folderID
int, userID
int, uploadDate
日期时间)
;
INSERT INTO Table1
(`fileID`, `fileName`, `folderID`, `userID`, `uploadDate`)
VALUES
(1, 'file1', 1, 1, '2014-02-03 12:00:00'),
(2, 'file2', 2, 1, '2014-01-05 12:00:00'),
(3, 'file3', 3, 1, '2014-01-08 12:00:00'),
(4, 'file4', 2, 1, '2014-01-04 12:00:00'),
(5, 'file5', 1, 1, '2014-01-07 12:00:00'),
(6, 'file6', 3, 1, '2014-01-09 12:00:00')
;
create temporary table last_files (
fileID int, fileName varchar(5), folderID int, userID int ,
unique key( folderID, userID )
);
REPLACE INTO last_files ( fileID, fileName, folderID, userID )
select fileID, fileName, folderID, userID
from Table1 order by uploadDate asc;
select * from last_files;
它不使用子查询,而是使用临时表来整理结果,然后连接回原始表。这是我过去在大型 table 上使用过的模式,效果非常好。
如果您正在寻找特定用户,则可以使用SORT BY uploadDate DESC LIMIT 1
,但这显然是有限的。
关于php - MySQL - 查找每个用户最近上传的内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22393171/