Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php MySQL-查找每个用户的最新上载_Php_Mysql - Fatal编程技术网

Php MySQL-查找每个用户的最新上载

Php MySQL-查找每个用户的最新上载,php,mysql,Php,Mysql,我有以下文件表,其中存储了多个用户的文件(该表仅显示了一个用户的文件) 我想按日期查找每个文件夹上载的最新文件。 结果应该是这样的 +--------+----------+----------+------------------------------+ | fileID | fileName | folderID | userID | uploadDate | +--------+----------+----------+--------+-------

我有以下
文件
表,其中存储了多个用户的文件(该表仅显示了一个用户的文件)

我想按日期查找每个文件夹上载的最新文件。 结果应该是这样的

+--------+----------+----------+------------------------------+
| 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
datetime) ;

它不使用子查询,而是使用临时表来整理结果,然后连接回原始表。这是我过去在大型表上使用的一种模式,效果非常好


如果您正在寻找一个特定的用户,您可以改为按uploadDate DESC LIMIT 1进行排序,但这显然是有限的

这是一个常见的问题,您应该将下面的问题添加到书签中,这些问题有许多非常常见且非常有用的查询。祝你好运MySQL手册中有整整一章专门解释这个问题。这已经被问了好几次了。可能是
+--------+----------+----------+------------------------------+
| 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 |
+--------+----------+----------+--------+---------------------+
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;