Страницы

Поиск по вопросам

четверг, 5 декабря 2019 г.

Как выводить всех учеников, которые должны произвести оплату?

#php #html #mysql #phpmyadmin


Пишу на PHP сайт для учета данных, оплаты и посещаемости учеников. Тех, кто приходит
к репетитору.
В MySQL есть таблица pays, в которую заносится последняя оплата ученика. И есть таблица
dates, куда добавляются даты посещения каждого ученика.
Оплата производится за 8 занятий. 
Вопрос: никак не могу додуматься, как можно сделать, чтобы выводить всех учеников,
которые должны произвести оплату и у которых седьмое или восьмое занятие по счету?
И чтобы не исчезало, пока не добавлено в таблицу pays.  
    


Ответы

Ответ 1



SELECT dates.user_id FROM dates LEFT JOIN pays ON pays.user_id = dates.user_id WHERE pays.id IS NULL GROUP BY dates.user_id HAVING COUNT(dates.user_id) IN (7,8) Берем все записи из dates, джойним pays с оплатами, делаем условие того, что оплаты не было произведено, группируем по user_id и смотрим чтобы по пользователю совпадало условие что у него 7 или 8 занятие. Вы спросили про количество посещений во второй месяц, пока самое простое,что придумал, так это так, получилось конечно как-то помоему колхозно, но ладно. Выбираем все даты, джойним pays, групируем по user_id, смотрим если кол-во разных дат посещений входит равно 7*кол-ву оплат или 8*кол-во оплат, (кол-во оплат минимум равно 1), то пользователь входит в интервал и его можно предупредить. У pays обязательно должен быть уникальный идентификатор (id), dates обязательно должна иметь дату посещения (date). SELECT dates.user_id, COUNT(DISTINCT pays.id)+1 pcount FROM dates LEFT JOIN pays ON pays.user_id = dates.user_id GROUP BY dates.user_id HAVING COUNT(DISTINCT dates.date) IN (7*pcount, 8*pcount) Как короче и эффектнее написать второй, не пришло пока в голову.

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

Отправить комментарий