php - MySQL - 查找每个用户最近上传的内容

标签 php mysql

我有以下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/

相关文章:

javascript - HTML - 使用 javascript 停止 PHP 脚本的输入检查

SQL 按子句分组

php - 如何在耗时达到特定时间后自动发送电子邮件?

php - MySQL -> 选择第二低的值

php - yii 有哪些用户管理模块?

php - 无法使用 php 更改 mysql 中单行的两件事

mysql - 单行的多个值

mysql - mysql。在单列中查找倍数

php - 书签脚本?

php - 如何在 PDO 中获取数据库名称?