У меня есть таблица 'Course'
и таблица 'Event'
. Я бы хотел, чтобы все курсы действительно имели место, т. Е. Они не отменены событием.Смуты, осмысляющие запрос
Я сделал это простым запросом на весь курс и анализ сценариев (в основном, некоторые петли), но этот запрос занимает время, которое я считаю слишком долго. Я думаю, что то, что я хочу, возможно в одном запросе и без циклов для оптимизации этого запроса.
Вот подробности:
'Course' c
имеют поля'date'
,'duration'
и многие ко многим отношения с'Grade'
столом'Event' e
имеют поля'begin'
,'end'
,'break'
и многие ко многим отношения с таблицей'Grade'
- Курс отменяется событием, если оно происходит одновременно, и если событие является перерывом ())
- Курс отменяется событием, если все оценки курса происходят в событиях, происходящих одновременно (возможно много событий, я должен подвести итоги этих событий и сравнить их с классы курсов). Это та часть, которую я делаю с циклом, у меня есть некоторые проблемы, чтобы концептуализировать это.
Любая помощь приветствуется,
Спасибо заранее,
PS: Я использую MySQL
EDIT: детали Таблицы
-Course
+-----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| date | datetime | NO | | NULL | |
| duration | time | NO | | NULL | |
| type | int(11) | NO | | NULL | |
+-----------+-------------+------+-----+---------+----------------+
+-------+---------------------+----------+------+
| id | date | duration | type |
+-------+---------------------+----------+------+
| 1 | 2013-12-10 10:00:00 | 02:00:00 | 0 |
| 2 | 2013-12-11 10:00:00 | 02:00:00 | 0 |
+-------+---------------------+----------+------+
-Event
+-------------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| begin | datetime | NO | | NULL | |
| end | datetime | YES | | NULL | |
| break | tinyint(1) | NO | | NULL | |
+-------------+-------------+------+-----+---------+----------------+
+----+---------------------+---------------------+-------+
| id | begin | end | break |
+----+---------------------+---------------------+-------+
| 1 | 2013-12-10 00:00:00 | 2013-12-11 23:59:00 | 1 |
+----+---------------------+---------------------+-------+
-course_grade
+-----------+----------+
| course_id | grade_id |
+-----------+----------+
| 1 | 66 |
| 2 | 65 |
| 2 | 66 |
+-----------+----------+
-event_grade
+----------+----------+
| grade_id | event_id |
+----------+----------+
| 66 | 1 |
+----------+----------+
Так вот, только должен появиться курс 2, потому что курс 1 имеет только один класс, и этот класс имеет событие.
Вы можете оставить SQLFiddle пожалуйста? Я пытаюсь визуализировать вашу схему и не удается ... –
, пожалуйста, ставьте таблицы samples.bye – Pericles
SQL Fiddle - это опция, но также показывающая данные образца даже здесь, просто не используйте вкладки для форматирования и выделения и Ctrl + K для форматирования текст (или с изображением фигурного скобки). Это звучит как школьные курсы с оценками, но событие, имеющее оценки, не имеет смысла, если в курсе ex: 1 не много событий (тестовый, среднесрочный, окончательный экзамен), а все события и оценки прерываются ... Если бы это было так, я бы ожидал таблицу STUDENT/GRADEs. – DRapp