似たような質問がたくさんありますが、とても複雑で理解できないか、同じ質問をしているようには見えません。
簡単です。ユーザー(dmid)とダウンロード(dfid)の2つの列があります。
特定のファイルをダウンロードしたすべてのユーザーを選択します。
SELECT DISTINCT dmid FROM downloads_downloads where dfid = "7024"
上記のユーザーを使用して、ダウンロードしたすべてのファイルを検索します。
SELECT dfid from downloads_downloads WHERE dmid = {user ids from #1 above}
Dfidの結果をカウントして順序付けます。これにより、各ファイルが受信したダウンロード数を確認できます。
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")
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"
これに時間がかかりすぎる場合は、おそらく説明計画を投稿する必要があります(グーグルイット!)