Прежде чем я начну кодировать, я хочу сначала придумать хороший дизайн. По сути, у меня есть таблица базы данных, заполненная датами, и пользователи, связанные с этими датами (даты в формате sql).
Используя PHP, я хочу для каждого пользователя рассчитать (подсчитать в общем), сколько дней недели они связаны, а также сколько выходных они связаны. Мне нужно иметь общий счет за каждый месяц, а также общий итог. Это нужно для «запуска» с августа по май.
Я знаю, что могу определить, является ли день выходным или рабочим днем с помощью:
$date = '2007/08/30';
$weekday = date('l', strtotime($date));
Для определения месяца я могу использовать SQL и использовать инструкцию case, например, для получения «October» из «10»:
SELECT MONTH(DATE_SPECIFIED);
Однако я больше всего не уверен, через какой процесс пройти. Я мог бы легко иметь много запросов, но это неэффективно. В идеале я думал о печати результатов в HTML-таблице.
Может кто-нибудь предложить какие-либо предложения / советы о том, как вы могли бы сделать это?
Спасибо.
EDIT:
У меня есть таблица пользователей и таблица событий.
Вот таблица пользователей:
CREATE TABLE `users` (
`fname` varchar(50) NOT NULL,
`lname` varchar(50) NOT NULL,
`role` varchar(75) NOT NULL,
`region` tinyint(4) unsigned default NULL,
`username` varchar(25) NOT NULL,
`password` varchar(75) NOT NULL,
`new_pass` varchar(5) default NULL,
PRIMARY KEY (`username`),
KEY `role` (`role`),
KEY `region` (`region`),
CONSTRAINT `users_ibfk_2` FOREIGN KEY (`region`) REFERENCES `region` (`region`) ON UPDATE CASCADE,
CONSTRAINT `users_ibfk_1` FOREIGN KEY (`role`) REFERENCES `role` (`role`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8
А вот таблица событий:
CREATE TABLE `eventcal` (
`id` int(11) NOT NULL auto_increment,
`region` tinyint(3) unsigned NOT NULL,
`primary` varchar(25) NOT NULL,
`secondary` tinyint(1) NOT NULL,
`eventDate` date NOT NULL,
PRIMARY KEY (`id`),
KEY `primary_2` (`primary`),
CONSTRAINT `eventcal_ibfk_1` FOREIGN KEY (`primary`) REFERENCES `users` (`username`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=28 DEFAULT CHARSET=utf8
Обратите внимание, что evencal.primary имеет ссылку на внешний ключ для users.username ...