我有一个表包含所有可下载项的记录,另一个表包含每个下载的记录,其中包括下载日期和项目的ID以及下载它的用户。
当我从数据库中获取项目列表时,我希望查询查找项目下载的次数,并将其与其他项目数据一起包含。
这是我的SQL:
SELECT t1.*,
(SELECT COUNT(*)
FROM tl_downloads
WHERE item_id = t1.id
AND download_date > ?)
AS downloads_count
FROM tl_items AS t1
ORDER BY downloads_count DESC
上面的查询工作正常,因为我在结果中得到一个名为' downloads_count'它包含正确的计数但不允许我按此值排序。
如果能够通过子查询中返回的值对结果进行排序,我需要做什么?
如果您需要更多信息,请与我们联系!
编辑 - 示例数据
tl_items tl_downloads
id name id item_id download_date
1 Item 1 1 1 1385964000
2 Item 2 2 1 1385964000
3 Item 3 3 3 1385964000
我期望的结果是:
Item 1 - Downloads 2
Item 3 - Downloads 1
Item 2 - Downloads 0
由于
答案 0 :(得分:12)
试,
SELECT t1.*,
s.totalCount AS downloads_count
FROM tl_items AS t1
LEFT JOIN
(
SELECT item_id, COUNT(*) totalCount
FROM tl_downloads
WHERE download_date > ?
GROUP BY item_id
) s ON s.item_id = t1.id
ORDER BY downloads_count DESC
答案 1 :(得分:0)
期望结果中包含0次下载并且下载日期限制似乎对我来说是矛盾的,除非我忽视它。
SELECT tt1.id, COUNT(tt2.id) AS DOWNLOAD_COUNT
FROM t1_items tt1
LEFT JOIN t1_downloads tt2 ON tt1.id = tt2.item_id
WHERE download_date > 1385963000 OR download_date IS NULL
GROUP BY tt1.id
ORDER BY DOWNLOAD_COUNT DESC
上述查询将返回预期结果。
答案 2 :(得分:0)
尚未测试,但另一种方法:
SELECT t1.*
FROM tl_items AS t1
ORDER BY
(SELECT COUNT(*) totalCount
FROM tl_downloads
WHERE item_id = t1.id
AND download_date > ? ORDER BY totalCount [desc])
对吗?也许因为没有加入而更快。