使用PHP对大量MySQL表进行分组和排序

使用PHP对大量MySQL表进行分组和排序,php,mysql,Php,Mysql,我试图根据一条记录在下载表中出现的次数,在多个表上按DESC顺序输出一系列连接的记录 资源数据(资源数据): ---------------------------------------- | ID | Contributor ID | Title | ---------------------------------------- | 1 | 111 | Resource A | | 2 | 222 | Reso

我试图根据一条记录在下载表中出现的次数,在多个表上按DESC顺序输出一系列连接的记录

资源数据(资源数据):

----------------------------------------
| ID  |  Contributor ID |     Title    |
----------------------------------------
|  1  |        111      |  Resource A  |
|  2  |        222      |  Resource B  |
|  3  |        333      |  Resource C  |
|  4  |        222      |  Resource D  |
|  5  |        111      |  Resource E  |
----------------------------------------
----------------------
|   ID  |  User Name |
----------------------
|  111  |   User X   |
|  222  |   User Y   |
|  333  |   User Z   |
----------------------
---------------------
|  ID | Resource ID |
---------------------
|  1  |      4      |
|  2  |      1      |
|  3  |      4      |
|  4  |      3      |
|  5  |      4      |
|  6  |      4      |
|  7  |      2      |
|  8  |      5      |
|  9  |      4      |
|  10 |      5      |
---------------------
贡献者数据(贡献者数据):

----------------------------------------
| ID  |  Contributor ID |     Title    |
----------------------------------------
|  1  |        111      |  Resource A  |
|  2  |        222      |  Resource B  |
|  3  |        333      |  Resource C  |
|  4  |        222      |  Resource D  |
|  5  |        111      |  Resource E  |
----------------------------------------
----------------------
|   ID  |  User Name |
----------------------
|  111  |   User X   |
|  222  |   User Y   |
|  333  |   User Z   |
----------------------
---------------------
|  ID | Resource ID |
---------------------
|  1  |      4      |
|  2  |      1      |
|  3  |      4      |
|  4  |      3      |
|  5  |      4      |
|  6  |      4      |
|  7  |      2      |
|  8  |      5      |
|  9  |      4      |
|  10 |      5      |
---------------------
下载数据(下载数据):

----------------------------------------
| ID  |  Contributor ID |     Title    |
----------------------------------------
|  1  |        111      |  Resource A  |
|  2  |        222      |  Resource B  |
|  3  |        333      |  Resource C  |
|  4  |        222      |  Resource D  |
|  5  |        111      |  Resource E  |
----------------------------------------
----------------------
|   ID  |  User Name |
----------------------
|  111  |   User X   |
|  222  |   User Y   |
|  333  |   User Z   |
----------------------
---------------------
|  ID | Resource ID |
---------------------
|  1  |      4      |
|  2  |      1      |
|  3  |      4      |
|  4  |      3      |
|  5  |      4      |
|  6  |      4      |
|  7  |      2      |
|  8  |      5      |
|  9  |      4      |
|  10 |      5      |
---------------------
排序后,数据应显示如下内容(不是格式,只是内容):

到目前为止,我有这段代码,但它只输出了一条记录(应该有很多条,根据查询限制为4条)


您需要的是一个
GROUP BY
子句来对下载数据表中的资源id记录进行分组,如下所示

SELECT contributor_data.id, resource_data.id, resource_data.title,
       contributor_data.username, COUNT(download_data.id) AS records
FROM resource_data
JOIN contributor_data
     ON resource_data.contributor_id = contributor_data.id
JOIN download_data
     ON resource_data.id = download_data.resource_id
GROUP BY download_data.resource_id
ORDER BY records DESC;
这将为您提供所需的结果,因为您现在可以基于GROUP BY(因为ORDER BY发生在分组完成之后)为计数结果别名

所以你的最终结果看起来更像你想要的

+------+------+------------+----------+---------+
| id   | id   | title      | username | records |
+------+------+------------+----------+---------+
|  222 |    4 | Resource D | User Y   |       5 |
|  111 |    5 | Resource E | User X   |       2 |
|  222 |    2 | Resource B | User Y   |       1 |
|  333 |    3 | Resource C | User Z   |       1 |
|  111 |    1 | Resource A | User X   |       1 |
+------+------+------------+----------+---------+
这是一个