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