Użyj wyników z jednego zapytania sql w innym poleceniu where (subquery?)

Widzę wiele podobnych pytań, ale albo są tak złożone, że nie mogę ich zrozumieć, albo nie wydają się zadawać tego samego.

To proste: mam dwie kolumny: users (dmid) i downloads (dfid).

  1. Wybierz wszystkich użytkowników, którzy pobrali konkretny plik:

    SELECT DISTINCT dmid FROM downloads_downloads where dfid = "7024"
    
  2. Używając powyższych użytkowników, Znajdź wszystkie pobrane pliki:

    SELECT dfid from downloads_downloads WHERE dmid = {user ids from #1 above}
    
  3. Policz i uporządkuj wyniki dfid, abyśmy mogli zobaczyć, ile pobrań każdy otrzymany plik:

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

Moja próba odpowiedzi.

Wydaje się być blisko, ale MySql nie odpowiada nawet po 30 sekundach-w końcu restartuję Apache ' a. I nie wiem teraz jak uporządkować liczbę i kolejność bez uzyskiwania błędów składniowych z powodu złożonego oświadczenia--i to może nawet nie być właściwe oświadczenie.

SELECT dfid from downloads_downloads WHERE dmid IN (
    SELECT DISTINCT dmid FROM `downloads_downloads` where dfid = "7024")
Author: Scimonster, 2012-12-08

1 answers

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

Lub za pomocą połączenia self

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

Jeśli trwa to zbyt długo, prawdopodobnie będziesz musiał opublikować plan wyjaśnień(google to!)

 53
Author: Paul Creasey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-12-08 16:29:28