2009-12-16 24 views
0

我的問題太複雜如何我不能從MySQL不重複選擇

現在我有files

我從中選擇了哪個在過去七天內添加的文件。它會返回很多ID,如1,2,3,4,5好吧 這很棒。現在的問題:

我有tutorial

tutorial已經files

現在我從files選擇哪個上次從7天

,並加入了一些文件列表中下載的文件排序計數desc 之後我從tutorial中選擇,其中files表中的教程編號相等 這意味着

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

不幸的是我不明白問題是什麼。你能否提供你的表格佈局,一些代碼示例和你想要做什麼的更清晰的解釋? – houmam 2009-12-16 12:38:09

+2

Blimey。重新開始,改述! – Skilldrick 2009-12-16 12:38:15

+0

你有什麼問題? – Tebo 2009-12-16 12:39:04

回答

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; 

您可以通過一個SUM取決於您希望如何計算每個教程下載的數量改變MAX

相同,但限制它在過去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

噢我的天啊,我知道 請讀好 – 2009-12-16 12:52:39

+0

請顯示更多代碼。並告訴你期待什麼? – 2009-12-16 13:01:30

+2

@Moustafa沒有冒犯,但你的英語不完美,很難理解你的問題。你沒有提到任何關於嘗試SELECT DISTINCT的東西,所以Dmitry的答案似乎足夠有效。如果您提供了一些真實的樣本數據,您正在使用的預期數據和樣本查詢,這將非常有幫助。 – 2009-12-16 13:03:07

0

使用Limit 1可以在訂購後獲得最上面一排。這將只返回第一行,這是最下載的文件(請記住您已經下了它,所以最下載的文件將在最上面)。