2015-11-08 118 views
1

我正尝试在DESC顺序中根据记录在下载表中出现的次数输出一系列连接记录。使用PHP对众多MySQL表进行分组和排序

资源数据(resource_data):

---------------------------------------- 
| ID | Contributor ID |  Title | 
---------------------------------------- 
| 1 |  111  | Resource A | 
| 2 |  222  | Resource B | 
| 3 |  333  | Resource C | 
| 4 |  222  | Resource D | 
| 5 |  111  | Resource E | 
---------------------------------------- 

Contributor数据(contributor_data):

---------------------- 
| ID | User Name | 
---------------------- 
| 111 | User X | 
| 222 | User Y | 
| 333 | User Z | 
---------------------- 

下载数据(download_data):

--------------------- 
| ID | Resource ID | 
--------------------- 
| 1 |  4  | 
| 2 |  1  | 
| 3 |  4  | 
| 4 |  3  | 
| 5 |  4  | 
| 6 |  4  | 
| 7 |  2  | 
| 8 |  5  | 
| 9 |  4  | 
| 10 |  5  | 
--------------------- 

当排序,数据应该出来的东西等(未格式化,只是内容):

4 222 Resource D User Y (5 records) 
5 111 Resource E User X (3 records) 
2 222 Resource B User Y (2 records) 
3 333 Resource C User Z (1 record) 
1 111 Resource A User X (1 record) 

到目前为止,我有这样的代码,但它只是把出一条记录(应该有很多,有限根据查询为4)。

SELECT * FROM resource_data, contributor_data, download_data 
WHERE resource_data.contributor_id=contributor_data.id 
AND download_data.resource_id=resource_data.id 
ORDER BY count(download_data.resource_id) DESC LIMIT 4 

回答

1

你想要的是一个GROUP BY子句组从这样的download_data表的资源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; 

这将会给你想要的结果,因为你现在可以别名COUNT基于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 | 
+------+------+------------+----------+---------+ 

下面是一个SQLfiddle of the same ...