#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