|
|
|
|
|
для: cheops
(09.11.2007 в 18:42)
| | cheops А обязательно это делать одним запросом (это будет достаточно затруднительно)? Или можно прибегнуть к PHP-скрипту, который осуществит преобразование?
- Нет одним запросом это делать необязательно.
Можно и с помощью PHP-скрипта, только как осуществить это преобразование?
Ведь тут получается надо использовать функции времени?
В ответ olejek
А как вы посветуете изменить эту структуру?
Вроде бы она достаточно логична и проста.
начальная дата - конечная дата - дни недели - название курса - номер комнаты - часы
Что тут можно изменить | |
|
|
|
|
|
|
|
для: cheops
(09.11.2007 в 18:42)
| | По-моему у Вас непродуманная структура БД. В хорошо структурированной базе данных легко выполнить запрос любой сложности.
"Лучше год обдумывать структуру БД, чем потом два года ее исправлять" - неизвестный автор. | |
|
|
|
|
|
|
|
для: Iskatel
(06.11.2007 в 13:18)
| | Что-то прочитанным отметилось сообщение...
А обязательно это делать одним запросом (это будет достаточно затруднительно)? Или можно прибегнуть к PHP-скрипту, который осуществит преобразование? | |
|
|
|
|
|
|
|
для: Iskatel
(06.11.2007 в 13:18)
| | Это невыполнимо или трудно ? может я не совсем понятно описал проблеммму? | |
|
|
|
|
|
|
|
для: cheops
(05.11.2007 в 12:00)
| | У меня стоит EasyPHP.
Дамп это вот это? ( если нет объясните пожалуйста что имеется ввиду?)
CREATE TABLE `tb_raspisanie` (
`id` int(10) unsigned NOT NULL auto_increment,
`comnata` tinyint(4) NOT NULL default '0',
`cours` varchar(30) NOT NULL default '',
`debut` date NOT NULL default '0000-00-00',
`fin` date NOT NULL default '0000-00-00',
`mon` smallint(6) NOT NULL default '0',
`tues` smallint(6) NOT NULL default '0',
`wed` smallint(6) NOT NULL default '0',
`thu` tinyint(4) NOT NULL default '0',
`fri` tinyint(4) NOT NULL default '0',
`temp` tinyint(4) NOT NULL default '0',
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;
--
-- Contenu de la table `tb_raspisanie`
--
INSERT INTO `tb_raspisanie` VALUES (1, 12, 'Mathematika', '2007-09-02', '2007-11-30', 1, 0, 1, 0, 0, 1);
INSERT INTO `tb_raspisanie` VALUES (2, 11, 'Risovanie', '2007-09-03', '2007-11-30', 0, 1, 0, 0, 1, 2);
INSERT INTO `tb_raspisanie` VALUES (3, 12, 'Penie', '2007-10-01', '2007-12-28', 0, 0, 1, 0, 1, 2);
INSERT INTO `tb_raspisanie` VALUES (4, 13, 'Geometria', '2007-09-03', '2008-03-06', 0, 1, 0, 0, 1, 1);
INSERT INTO `tb_raspisanie` VALUES (5, 13, 'Chtenie', '2007-11-01', '2007-12-28', 1, 0, 1, 1, 0, 1);
|
Я наверное неверно сформулировал.
Количество записей не должно совпадать
В первой таблице номер комнаты, название занятия и интервал времени с какой даты по какую они идут ну и плюс дни недели по каким идет плюс информация до обеда или после.
Во второй таблице должны быть все дни подряд в календарном порядке когда идут занятия.
Например если математика идет два месяца по понедельникам и вторникам то значит должно появится 16 записей с уникальной датой на каждую запись рассчитанная из интервала времени и дней недели первой таблицы,
Химия например идет 1 раз в неделю в течении 4 месяце значит к тем шестнадцати добавляется еще 12 записей и.т.д.
И все эти записи отсортированные по дате выводятся. Если на какой то день выпадает несколько занятий то они подряд все и выводятся.
Вот например так:
------------------------------------------------------------------------------------
id | comnata | data | temp | kurs
------------------------------------------------------------------------------------
1 | комната 1 | 2007-09-03 | до обеда | рисование
2 | комната 2 | 2007-09-03 | до обеда | пение
3 | комната 2 | 2007-09-04 | после обеда | математика
4 | комната 1 | 2007-09-06 | до обеда | рисование
5 | комната 2 | 2007-09-06 | до обеда | пение
6 | комната 2 | 2007-09-06 | после обеда | математика
|
т.е например потом если я задам в запросе к второй таблице дату 2007-09-03
то мне выведутся все записи соответствующие этому дню
1 | комната 1 | 2007-09-03 | до обеда | китайский |
2 | комната 2 | 2007-09-03 | до обеда | пение |
Надеюсь мне удалось правильно сформулировать задачу. очень надеюсь на вашу помощь.
Самый ключевой момент как заполнить вторую таблицу исходя из интервалов времени и условий первой таблицы. | |
|
|
|
|
|
|
|
для: Iskatel
(30.10.2007 в 15:41)
| | Не очень понятно количество записей в таблице data и raspisanie должно совпадать? Тогда можно воспользоваться оператором CREATE TABLE ... FROM SELECT, отталкиваясь от следующего SELECT-запроса
SET @num := 0;
SELECT @num := @num +1 AS id,
id AS id_data,
debut AS day,
IF(temp = 1,
"до обеда",
IF(temp = 2,
"после обеда",
"весь день")) AS temp,
vid
FROM `data`
|
PS Для таких сложных таблиц лучше сразу прикреплять к сообщению кусок дампа - очень долго её восстанавливать на своей машине лишь по описанию - поэтому мало ответов по теме. | |
|
|
|
|
|
|
|
для: Iskatel
(30.10.2007 в 15:41)
| | Никто не поможет советом? | |
|
|
|
|
|
|
|
для: mihdan
(30.10.2007 в 22:02)
| | Я там уже задал этот вопрос но никто не ответил.
Я подумал, эту задачу разве можно целиком решить на MySQl?
Надеюсь на ваш совет | |
|
|
|
|
|
|
|
для: Iskatel
(30.10.2007 в 15:41)
| | Иди в MySQL форум | |
|
|
|
|
|
|
| помогите пожалуйста советом.
есть таблица БД в котором два поля в формате дата определяют календарный интервал времени
например DEBUT (2007-09-01) и FIN (2008-06-30) .
Пять полей MONDAY, TUESDAY, WEDNESDAY, THURSDAY и FRIDAY в виде да-нет
поле TEMP со значениями 1 (до обеда) / 2 (после обеда) / 3 (весь день) ну и ID определяющий вид деятельности ( 1 - занятие китайским / 2 - математика ... )
Таких записей может быть много (по идее они не пересекаются)
Надо дни отвечающие всем условиям заполнить в таблицу
Например из таблицы data:
------------------------------------------------------------------------------------
id | debut | fin | mon | tues | wed | thu | fri | temp | vid
------------------------------------------------------------------------------------
1 | 2007-09-03 | 2007-11-30 | Y | N | N | N | N | 1 | китайский
2 | 2007-09-11 | 2007-09-25 | N | Y | N | N | Y | 2 | математика
создает записи в таблицу raspisanie
------------------------------------------------------------------------------------
id | id_data | day | temp | vid
------------------------------------------------------------------------------------
1 | 1 | 2007-09-03 | до обеда | китайский
2 | 1 | 2007-09-10 | до обеда | китайский
3 | 2 | 2007-09-11 | после обеда | математика
........... и.т.д.
Очень -очень буду признателен за помощь! | |
|
|
|
|