我怎么不能没有重复从mysql中选择

时间:2009-12-16 12:31:35

标签: php mysql

我的问题太复杂了

现在我有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

这意味着我在下载次数最多的列表中有一个教程和两个文件 将两次复制教程标题。

它非常复杂。

3 个答案:

答案 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获取订购后的最高行。这将只返回第一行,这是最下载的文件(记住你订购了它,所以最下载的文件将在最上面)。