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

Инструкция MySQL, объединяющая соединение и счетчик?

У меня есть таблица "папок". Я хочу вернуть все записи с userId из 16.

SELECT * FROM `folders` WHERE userId = 16;

У меня есть таблица "файлов". Для каждой "папки", возвращенной выше, я хочу вернуть количество "файлов" в эту "папку".

SELECT COUNT(*) as "Files" FROM files WHERE Folder = n;

Как их объединить? Я потерялся. Спасибо!

4b9b3361

Ответ 2

вам, вероятно, понадобится использовать GROUP BY и сгруппировать его по ID или тому подобное:

SELECT 
    folders.*,
    COUNT(files.*) as filetotal 
FROM folders 
    LEFT JOIN files ON folders.ID=files.folderID 
WHERE userId = 16 
GROUP BY folders.ID

Ответ 3

Сделайте вспомогательный запрос, который группирует по Folders, чтобы получить подсчет для каждой папки, затем присоедините его к первому запросу вроде этого:

    select
       f.*
       fc.Files
    from
       Folders f
--
       -- Join the sub query with the counts by folder     
       JOIN (select
               Folder,
               count(*) Files
             from
                files
             group by
                Folder ) as fc
          on ( fc.Folder = f.Folder )
    where
       f.userid = 16

Ответ 4

select 
    f.`folder`,
    f.`userId`,
    r.`count`

from
    `folders` f
    left join 
    (
        select 
            `Folder`,
            count(`id`) `count`

        from `files`

            group by `Folder`
    ) r
        on r.`Folder`=f.`folder`

where 
    `userId`=16



если вы не хотите использовать оператор group by.


У меня была аналогичная проблема в списке продуктов, где я хотел подсчитать звездный рейтинг продукта в другой таблице [1-5] и количество пользователей, голосовавших за этот конкретный продукт.