MySQL: распределение ограниченных мест среди студентов на основе принципа «первым пришел - первым обслужен» - PullRequest
0 голосов
/ 24 февраля 2011

представьте себе колледж, где студенты могут записаться на курсы онлайн через веб-сайт. Каждый курс может иметь определенное максимальное количество принятых студентов, и прием основан на том, кто регистрируется первым. Например, в классе «Искусство» с 15 доступными местами, только 15 студентов, которые первыми зарегистрировались на этот курс через веб-сайт, могли бы принять участие.

В основном есть три таблицы MySQL: пользователи (фактически студенты с uid в качестве уникального идентификатора пользователя) курсы (характеристики курса, такие как название и размер класса; cid (идентификатор курса) является первичным ключом) links_users_courses (будет содержать три столбца uid, cid, reg_date, где reg_date - переменная даты и времени, отражающая, когда пользователь uid зарегистрировался для курса cid)

Сейчас я ищу решение MySQL для проблемы отображения пользователю A (uid = 100) не только списка всех курсов, в которых он пытался получить место, что было бы простым способом, аналогичным * 1005. *

select cid,coursetitle from links_users_courses left join courses using(cid) where uid=100

но также независимо от того, прошел ли он курс или нет, то есть был ли его временной ранг ниже заданного размера класса каждого курса.

В конце он должен отобразить три столбца: идентификатор курса (cid), набор параметров и статус (зачислен, список ожидания), где список ожидания будет означать, что он находится за порогом для данного класса.

1 Ответ

0 голосов
/ 24 февраля 2011

Вы могли бы сделать все это в одном SQL-запросе (и если вы действительно захотите, я соберу это для вас), но я не думаю, что многие порекомендуют это. Я хотел бы немного подумать о вашем процессе. Используете ли вы процедурные языки для генерации вашего вывода (php, python и т. Д.)? Если это так, вам, возможно, будет гораздо лучше использовать более функциональный подход. Другой подход, если вы хотите оставаться очень близко к БД, заключается в использовании VIEW для работы с некоторыми промежуточными этапами. Но делать все это в одном SQL-запросе, вероятно, не так (за исключением, пожалуй, в качестве упражнения).

...