我看到许多类似的问题,但是它们要么太复杂,以至于我听不懂它们,要么它们似乎并没有在问同样的问题。
很简单:我有两列:用户(dmid)和下载(dfid)。
选择所有下载了特定文件的用户:
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"
如果这花了太长时间,那么您可能需要发布一个解释计划(用谷歌搜索!)