Выбор folders_name в запросе MySQL КОЛИЧЕСТВО () файлов в каждой папке

#mysql

#mysql

Вопрос:

Мой код MySQL выглядит следующим образом:

Он выбирает folder_names конкретного пользователя, но мне также нужны COUNT() файлы в каждой папке.

Этот код в порядке, но COUNT() всегда возвращает количество папок (в моем случае 6).

Как я могу заставить этот код ПОДСЧИТЫВАТЬ нужное количество файлов в каждой папке?

 SELECT fo.* , COUNT(f.file_id)
FROM folders fo
LEFT JOIN files f ON f.folder_id = fo.folder_id
WHERE fo.user_id = :user_id
GROUP BY fo.folder_id
ORDER BY fo.folder_name ASC
  

Теперь это работает!!!!!!!
Спасибо Биллу Карвину !!

Таблицы

 folders -> folder_id, user_id, folder_name, folder_icon_id, folder_description.

files -> file_id, folder_id, user_id, filename, file_icon, file_description.
  

Спасибо!

Комментарии:

1. Я думаю, вам нужно СГРУППИРОВАТЬ ПО folder_id, чтобы получить правильное количество

2. Да, моя ошибка. Но он по-прежнему показывает «6» (общее количество папок) в каждой строке

3. Для большей наглядности запрос «ПОЧТИ РАБОТАЕТ», но КОЛИЧЕСТВО (например,file_id) показывает 6 для каждой строки, что является общим количеством файлов, которые это использует…..

4. Разве вы не должны объединять файлы в папки ON f.folder_id = fo.folder_id ?

5. Да! Вот и все! Я делал это раньше, но в то время запрос был неполным …. вы сохранили мой запрос. 3 Heineken для вас!!!! На дом :))) спасибо, чувак

Ответ №1:

Ваше предложение о присоединении должно быть folder_id . Как если бы у a user было 5 файлов, то все папки с одинаковым user_id количеством будут показывать одинаковое количество, если вы присоединитесь на основе user_id .

 SELECT fo.* , COUNT(f.file_id)
FROM folders fo
LEFT JOIN files f ON f.folder_id = fo.folder_id 
WHERE fo.user_id = :user_id
GROUP BY fo.folder_id
ORDER BY fo.folder_name ASC