Подтвердить что ты не робот

Использовать результаты из одного запроса sql в другом, где оператор (подзапрос?)

Я вижу много похожих вопросов, но они либо настолько сложны, что я не могу их понять, либо они, похоже, не спрашивают одно и то же.

Это просто: у меня есть два столбца: пользователи (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")
4b9b3361

Ответ 1

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 it!)