Написал простой почтовый модуль для сайта. В таблице хранятся письма, где есть таке поля как получатель, статус прочтения, папка которой принадлежит письмо. Юзер кликает на нужную папку с письмами и получает список:
SELECT * FROM `message` WHERE `idreciver` = "<получатель>" AND `folder` = <нужная папка>
Но мне нужно в общей среде с папками показать пользователю сколько писем лежит в каждой папке. (Например: Входящие (15), Исходящие (25), Архивные (10).
Я делаю 3 запроса с просчётом строк и помещаю данные в нужные поля:
$писем в папке № 1 = SELECT COUNT(*) FROM `message` WHERE `idreciver` = "<получатель>" AND `folder` = <папка №1>
$писем в папке № 2 = SELECT COUNT(*) FROM `message` WHERE `idreciver` = "<получатель>" AND `folder` = <папка №2>
$писем в папке № 3 = SELECT COUNT(*) FROM `message` WHERE `idreciver` = "<получатель>" AND `folder` = <папка №3>
Я уже понимаю что это бред, а если папок 100? Но проблема усугубляется, когда мне нужно посчитать сколько в каждой из папок не прочтённых писем.
У каждой строки есть поля "readed" со статусом прочтения. И что бы мне вывести пользователю не просто количество писем по папкам но и сколько из них писем прочтённые а сколько не прочтённые, мне что, нужно сделать ещё 6 запросов для 3 папок? Как сделать правильно?
Сделайте group by
для каждой папки, тем самым получите для каждой папки общее количество сообщений и отдельно сделать разбивку на прочтенные и непрочтенные:
SELECT `folder`,
COUNT(*) as all_messages, /* Все сообщения в папке */
sum(`readed`) as readed_messages, /* Только прочтенные сообщения */
sum(if(`readed` = 0, 1, 0)) as unread_messages /* Только непрочтенные сообщения */
FROM `message`
WHERE `idreciver` = "<получатель>"
group by `folder`
Пример на sqlfiddle.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
У меня простой ajax запрос который должен отправлять input на сервер через сервлет не перезагружая страницуНо сервер не получает данные
Как реализовать поиск, есть массив с заголовками книг, поле для ввода текста, при вводе пары букв должны выводиться совпадения