У меня есть таблица событий/календарей MySQL, в которой каждый пользователь имеет несколько встреч/событий в течение дня. Если один пользователь не может выполнить эту встречу/мероприятие «потому что он/она работает за другим назначением», мне нужно иметь возможность повторно назначить эту встречу другому доступному пользователю. Поэтому мне нужно отобразить предложение пяти лучших пользователей, которые доступны для запланированного периода времени, и может принять это назначение, менеджер сможет повторно назначить эту встречу одному из предложенных пользователей.Как получить список доступных временных интервалов из базы данных календаря
Моя таблица событий выглядит примерно так
CREATE TABLE `calendar_events` (
`event_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`start_on` datetime NOT NULL,
`end_on` datetime NOT NULL,
`subject` varchar(255) NOT NULL,
`event_type` enum('Phone Call','Meeting','Event','Appointment','Other') CHARACTER SET latin1 COLLATE latin1_general_ci NOT NULL DEFAULT 'Phone Call',
`all_day_event` tinyint(1) DEFAULT '0' COMMENT '1 = all day event, 0 = no',
`phone_call_id` int(11) unsigned DEFAULT NULL,
`account_id` int(11) unsigned DEFAULT NULL,
`client_id` int(11) unsigned DEFAULT NULL,
`owner_id` int(11) unsigned NOT NULL,
`created_by` int(11) unsigned NOT NULL,
`created_on` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
`modified_by` int(11) unsigned DEFAULT NULL,
`modified_on` datetime DEFAULT NULL,
`event_location` varchar(255) DEFAULT NULL,
`event_notes` varchar(10000) DEFAULT NULL,
`status` tinyint(1) NOT NULL DEFAULT '1' COMMENT '0 = purged, 1 = active, 2=pass, 3 = cancled, 5 = waiting for auditor to be enabled',
PRIMARY KEY (`event_id`),
UNIQUE KEY `phone_call_id` (`phone_call_id`,`account_id`,`client_id`),
KEY `client_id` (`client_id`),
KEY `account_id` (`account_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
так позволяет для event_id = 100 присваивается user_id = 2 и планируется start_on = '2014-09-21 10:00:00' и end_on ' 2014-09-21 10:00:00 '
и user_id = 5 имеет назначение start_on' 2014-09-21 11:45:00 'и end_on' 2014-09-21 12:30:00 '
и user_id = 2 не могут назначить встречу, запланированную на «2014-09-21 10:00:00», поэтому система предложит user_id = 5, поскольку он будет в течение следующих 105 минут.
конечный набор данных должны быть
event_id org_owner suggested_owner available_for
100 2 5 105
Следующий запрос даст мне список всех доступных пользователям из users
таблицы вместе со значением start_on end_on если пользователь запланировал событие (один пользователь может иметь несколько записей.) Если start_on имеет значение null в этом запросе, это означает, что у этого пользователя нет никакого события, иначе он вернет начало каждого события.
Так, если идентификатор пользователя отображается в запросе выше и имеет значение NULL в столбце start_on, это означает, что этот пользователь доступен весь день, поэтому этот пользователь должен быть 1 из 5 пользователей, рекомендующих, поскольку он имеет один из максимально высокий доступность. Но если пользователь имеет одну или несколько строк в наборе данных с ненулевым значением в начале, то нам нужно посмотреть на start_on, который ближе всего к событию, а затем порекомендовать топ-5, которые имеют наибольшую доступность стоимость.
SELECT user_id, start_on, end_on, subject
FROM view_users AS su
LEFT JOIN calendar_events AS c ON c.owner_id = su.user_id AND c.start_on NOT BETWEEN '2014-09-30 00:00:00' AND '2014-09-30 23:59:59' AND c.status = 1
WHERE su.is_available_today = 1
Как извлечь этот набор данных?
он не работает. Кроме того, event_type не должен быть фактором. Независимо от типа события, у каждого есть возможность принять следующую встречу. Не работает означает, что предлагаемый владелец является тем же именем, что и org_owner. org_owner должен отличаться от того, что предложенным пользователем является предлагаемый владелец - новый доступный пользователь. – Jaylen
Я создал таблицу и заполнил данные и, похоже, работает для меня. Можете ли вы предоставить небольшую часть данных? Спасибо. Редактирование: просто увидели объяснение о имени, будет ли оно работать, просто добавив 'cal_avail.owner_id <> calendar_events.user_id' для последнего предложения 'on'? – nicolas
Это не сработало. Вот скрипка, которую я создал с некоторыми данными, чтобы дать вам некоторые данные. Http://sqlfiddle.com/#!9/8374f/1 Обратите внимание, что запрос я сужу запрос до event_id = 52, поэтому я могу найти для него 3 предложенных пользователя – Jaylen