我的问题太复杂了
现在我有files
表
我从中选择了过去七天添加的文件。它返回许多id,如1,2,3,4,5 ok 这很棒。现在问题是:
我有tutorial
表
每个tutorial
都有一些files
表
现在我从files
中选择了最后一次添加7天
并按下载的文件命令列出desc
然后我从tutorial
中选择files
表中相同的教程ID
这意味着
files_id tutorial_id
1 2
files_id tutorial_id
2 2
这意味着一个教程中的两个文件
现在的教程
tut_id tut_title
1 tite test
按文件列表最近七天下载
file_id = 1 this mean tutorial id = 2
file_id = 2 this mean tutorial id = 2
这意味着我在下载次数最多的列表中有一个教程和两个文件 将两次复制教程标题。
它非常复杂。
答案 0 :(得分:2)
答案 1 :(得分:1)
如果我理解正确,您基本上想要列出最多下载的教程与最多下载的文件。
在这种情况下,您可以使用以下查询来获取TOP 10:
SELECT tutorials.tut_id,
tutorials.tut_title,
MAX(files.file_downloads) AS tut_downloads
FROM tutorials, tutorial_files, files
WHERE tutorials.tut_id = tutorial_files.tut_id
AND files.file_id = tutorial_files.file_id
GROUP BY tutorials.tut_id, tutorials.tut_title
ORDER BY tut_downloads DESC
LIMIT 10;
您可以将MAX
更改为SUM
,具体取决于您希望如何计算每个教程的下载次数。
相同,但将其限制为过去7天内添加的文件:
SELECT tutorials.tut_id,
tutorials.tut_title,
MAX(files.file_downloads) AS tut_downloads
FROM tutorials, tutorial_files, files
WHERE tutorials.tut_id = tutorial_files.tut_id
AND files.file_id = tutorial_files.file_id
AND files.file_added >= DATE_SUB(NOW(), INTERVAL 7 DAYS)
GROUP BY tutorials.tut_id, tutorials.tut_title
ORDER BY tut_downloads DESC
LIMIT 10;
如果这不是你想要的,我很抱歉。你的问题很不清楚。
答案 2 :(得分:0)
使用Limit 1
获取订购后的最高行。这将只返回第一行,这是最下载的文件(记住你订购了它,所以最下载的文件将在最上面)。