2012-12-08 168 views
25

我看到很多類似的問題,但它們要麼太複雜,我不能理解它們,要麼它們似乎沒有問同樣的問題。在另一個語句(子查詢?)中使用一個sql查詢的結果

很簡單:我有兩列:用戶(dmid)和下載(dfid)。

  1. 選擇誰下載特定文件中的所有用戶:

    SELECT DISTINCT dmid FROM downloads_downloads where dfid = "7024" 
    
  2. 使用上面的用戶,找到所有他們所有下載的文件:

    SELECT dfid from downloads_downloads WHERE dmid = {user ids from #1 above} 
    
  3. 計數和秩序的英國國際發展部結果,所以我們可以看到每個文件接收的下載量有多少:

    dfid dl_count_field 
    ---- -------------- 
    18  103 
    3  77 
    903  66 
    

我試圖回答。

這看起來很接近,但MySql陷入泥潭,甚至在30秒後也不響應 - 我最終重新啓動了Apache。我現在不會因爲複雜的陳述而沒有得到語法錯誤來構造計數和順序 - 甚至可能不是正確的陳述。

SELECT dfid from downloads_downloads WHERE dmid IN (
    SELECT DISTINCT dmid FROM `downloads_downloads` where dfid = "7024") 
+3

你不應該使用用雙引號(''')來表示字符文字,用單引號代替。雙引號是MySQL的東西,不能與其他DBMS一起工作(因爲在標準SQL中,雙引號用於標識符,而不是文字)。那個dfid是一個數值,你不應該使用任何引號。數字不需要引號。 –

回答

33
SELECT dfid,count(*) 
from downloads_downloads 
WHERE dmid IN (
    SELECT dmid 
    FROM downloads_downloads 
    where dfid = "7024" 
) 
group by dfid 

或使用自加入

select t1.dfid,count(*) 
from downloads_downloads t1 
inner join downloads_downloads t2 
on t1.dmid = t2.dmid 
where t2.dfid = "7024" 

如果這個時間太長,那麼你可能會需要發佈一個解釋計劃(谷歌吧!)

+4

對於我的解決方案#1的作品,其相當容易理解,但可以請你解釋一下,我解決方案#2我可以站在自我加入 –

+0

@ paul-creasey我知道這是舊的,但你能解釋第二個代碼嗎? – Rafael

相關問題