У меня вопрос о базе данных, над которой я работаю, для лекций в Университете. В настоящее время у меня есть следующее:
lectures_available
+----------------+---------+-----------+-----------+
|availableSlotID |roomID |availableDate|availableTime|
+----------------+---------+-----------+-----------+
| 1 | 1 | Monday | 09:00:00 |
| 2 | 1 | Tuesday | 07:00:00 |
| 3 | 1 | Tuesday | 12:00:00 |
| 4 | 2 | Wednesday | 11:00:00 |
| 5 | 2 | Wednesday | 12:00:00 |
| 6 | 2 | Thursday | 10:00:00 |
| 7 | 3 | Tuesday | 14:00:00 |
| 8 | 3 | Friday | 09:00:00 |
+----------------+---------+-----------+-----------+
guest_lectures
+---------+-----------------------+----------+
| roomID | lecture | capacity |
+---------+-----------------------+----------+
| 1 | Engineering | 3 |
| 2 | Social Science | 3 |
| 3 | Archaeology | 2 |
| 4 | Biochemistry | 0 |
+---------+-----------------------+----------+
Мне было интересно, можно ли связать идентификатор roomID с лекциями, доступными для удобства в guest_lectures?
Например, прямо сейчас у меня есть 3 доступных даты для 1-го места (лекционная комната для инженеров), а ее емкость - 3. Но после того, как один из этих 3 получает заказ, емкость должна измениться до 2.
Немного помощи было бы очень полезно! :) Спасибо!
Вы можете обновить столбец capacity
с помощью JOIN
.
UPDATE guest_lectures AS l
LEFT JOIN lectures_available AS a ON l.room_id = a.room_id
SET l.capacity = IFNULL(COUNT(a.roomID), 0)
Я не думаю, что емкость должна быть столбцом в guest_lectures
, вы должны просто генерировать ее динамически:
SELECT lecture, COUNT(l.roomID) AS capacity
FROM guest_lectures g
LEFT JOIN lectures_available l ON g.roomID = l.roomID
GROUP BY g.roomID
capacity
кажется избыточным. Вы можете рассчитать его, используя соединение между таблицами сCOUNT(*)
.