Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум MySQL

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Выборка из одной таблицы в другую по календарному интервалу.

Сообщения:  [1-10] 

 
 автор: Iskatel   (21.11.2007 в 13:31)   письмо автору
 
   для: cheops   (09.11.2007 в 18:42)
 

cheops А обязательно это делать одним запросом (это будет достаточно затруднительно)? Или можно прибегнуть к PHP-скрипту, который осуществит преобразование?

- Нет одним запросом это делать необязательно.
Можно и с помощью PHP-скрипта, только как осуществить это преобразование?
Ведь тут получается надо использовать функции времени?

В ответ olejek
А как вы посветуете изменить эту структуру?
Вроде бы она достаточно логична и проста.
начальная дата - конечная дата - дни недели - название курса - номер комнаты - часы
Что тут можно изменить

   
 
 автор: olejek   (10.11.2007 в 09:51)   письмо автору
 
   для: cheops   (09.11.2007 в 18:42)
 

По-моему у Вас непродуманная структура БД. В хорошо структурированной базе данных легко выполнить запрос любой сложности.
"Лучше год обдумывать структуру БД, чем потом два года ее исправлять" - неизвестный автор.

   
 
 автор: cheops   (09.11.2007 в 18:42)   письмо автору
 
   для: Iskatel   (06.11.2007 в 13:18)
 

Что-то прочитанным отметилось сообщение...

А обязательно это делать одним запросом (это будет достаточно затруднительно)? Или можно прибегнуть к PHP-скрипту, который осуществит преобразование?

   
 
 автор: Iskatel   (09.11.2007 в 18:11)   письмо автору
 
   для: Iskatel   (06.11.2007 в 13:18)
 

Это невыполнимо или трудно ? может я не совсем понятно описал проблеммму?

   
 
 автор: 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 | до обеда | пение |

Надеюсь мне удалось правильно сформулировать задачу. очень надеюсь на вашу помощь.

Самый ключевой момент как заполнить вторую таблицу исходя из интервалов времени и условий первой таблицы.

   
 
 автор: cheops   (05.11.2007 в 12:00)   письмо автору
 
   для: 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   (05.11.2007 в 11:19)   письмо автору
 
   для: Iskatel   (30.10.2007 в 15:41)
 

Никто не поможет советом?

   
 
 автор: Iskatel   (31.10.2007 в 11:18)   письмо автору
 
   для: mihdan   (30.10.2007 в 22:02)
 

Я там уже задал этот вопрос но никто не ответил.
Я подумал, эту задачу разве можно целиком решить на MySQl?

Надеюсь на ваш совет

   
 
 автор: mihdan   (30.10.2007 в 22:02)   письмо автору
 
   для: Iskatel   (30.10.2007 в 15:41)
 

Иди в MySQL форум

   
 
 автор: Iskatel   (30.10.2007 в 15:41)   письмо автору
 
 

помогите пожалуйста советом.
есть таблица БД в котором два поля в формате дата определяют календарный интервал времени
например 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 | после обеда | математика
........... и.т.д.

Очень -очень буду признателен за помощь!

   

Сообщения:  [1-10] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования