49

似たような質問をたくさん見かけますが、それらは複雑すぎて理解できないか、同じことを尋ねているようには見えません。

簡単です。ユーザー (dmid) とダウンロード (dfid) の 2 つの列があります。

  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 の結果を数えて並べ替えて、各ファイルが何回ダウンロードされたかを確認できます。

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

答えようとする私の試み。

これは近いように見えますが、MySql が停止し、30 秒経っても応答しません。最終的に Apache を再起動します。また、ステートメントが複雑であるため、構文エラーを発生させずに count と order by を構造化する方法もわかりません。また、正しいステートメントでさえない可能性もあります。

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

1 に答える 1

58
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"

これに時間がかかりすぎる場合は、説明計画を投稿する必要があります (Google で検索してください)。

于 2012-12-08T16:29:28.897 に答える