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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: skript rezervaciji
 
 автор: rolands   (07.05.2007 в 23:36)   письмо автору
 
 

estj gatovij skript dlja rezervaciji?
nado sdelatj chtob polzovatelj mog zapisatsa na prijom: vibirajet nachalo denj, vremja prijoma i interval vremeni 10, 20, 30 min ili bolshe. kakije ideji?
naprimer vibirajet datu 20 maj vremja nachala 13:00 i vremja vizita 15 min.
polistal vashi knigi tam nechego padobnogo nenashol.
kakije ideji naschot strukturi bazi dannix
vot moj variant

people
id_person|person

time
id|start_time|end_time|id_person

tolko problemi s operacijami s vremenjem. nado chtob esli petja zapisalsa na prijom v 13:00 na 45 minut chtob nekto v 13:00-13:45 nemog zapisatsa. kak eto relizovatj. Kak opredelitj v ocherednoj interval vremeni ktota uzhe zapisalsa na prijom ili net? interesujet kak hranitj vremja v baze dannix

   
 
 автор: Бамси   (07.05.2007 в 23:49)   письмо автору
 
   для: rolands   (07.05.2007 в 23:36)
 

Подумайте о других, translit.ru

   
 
 автор: Rolands   (07.05.2007 в 23:57)   письмо автору
 
   для: Бамси   (07.05.2007 в 23:49)
 

надо сделать чтоб ползователь мог записатса на приём: вибираeт начало - ден, время приёма и интервал времени 10, 20, 30 мин или больше. какие идеи?
например вибирает дату 20 май время начала 13:00 и время визита 15 мин.
полистал ваши книги там нечего падобного ненашол.
какие идеи насчот структури бази данних
вот мой вариант

people - люди которие принимают поситителей
id_person|person|visits_time_begin|visits_time_end

time - занятое время
time_id|start_time|end_time|id_person

visits - информация о посесчениях
visit_id|time_id|id_person|visitor_name|visitor_surname|visitor_phone|visitor_mail|visitor_something...

только проблеми с операциями с временем. надо чтоб если петя записалса на приём в 13:00 на 45 минут чтоб некто в 13:00-13:45 немог записатса. как ето релизовать? Как определить в очередной интервал времени ктота уже записалса на приём или нет? интересуэт как хранить время в базе данних

GURU help needed :)

   
 
 автор: Бамси   (08.05.2007 в 00:09)   письмо автору
 
   для: Rolands   (07.05.2007 в 23:57)
 

Форма:
ФИО
Время приема. (день, месяц, время)
Длительность приема.

Передается все скрипту.
Из время приема все пихаем в mktime().
Прибавляем время которые указано в длительности приема.
Так формируется time_end.
Заносим все в бд.

id|FIO|time_start|time_end|lenght|

Далее регистрируется еще один пользователь, скрипт проверяет, что бы time_start нового пользователя было больше либо равно времени последнего посетителя.

   
 
 автор: Rolands   (08.05.2007 в 00:14)   письмо автору
 
   для: Бамси   (08.05.2007 в 00:09)
 

идея примерно ясна толко чтоб записатса на приём регицтрация ненужна кто хочет может записатса
пробема возникла чтоб в время когда ктота уже записалса некто дрогой немог записатса

б таблице people хранятса люди коториe принимают поситителей и бремя от ... до у в етоt интервал может записатса поситители.
чтота на подобиэ приём у брача (брачеи много, пациентов тоже) к одномы брачу в вибрахий период времени может записатса один человек, если в ето бремя ктота уже записалса ето надо определит и вибести цообсчение и время когда врач свободен
sorry about my russian :)

   
 
 автор: Loki   (08.05.2007 в 00:19)   письмо автору
 
   для: Rolands   (07.05.2007 в 23:57)
 

я бы сделал так:
start_time|end_time - это поля в базе
new_start_time|new_end_time - это данные которые пытаемся сохранить
делаем проверку

SELECT COUNT(*) FROM `time` WHERE  
(new_start_time BETWEEN start_time AND end_time) OR 
(new_end_time BETWEEN start_time AND end_time) OR 
(start_time BETWEEN new_start_time AND new_end_time) OR 
(end_time BETWEEN new_start_time AND new_end_time)

в первом часу ничего лучше в голову не приходит:)

   
 
 автор: Rolands   (08.05.2007 в 00:31)   письмо автору
 
   для: Loki   (08.05.2007 в 00:19)
 

какиe есчо идеи
интересуэт решение проблеми от aвторов книг :) po PHP MYSQL

   
 
 автор: Trianon   (08.05.2007 в 00:34)   письмо автору
 
   для: Loki   (08.05.2007 в 00:19)
 

Саш, between тут не подойдет - тут придется делать совершенно симметричное (ортогональное) сравнение диапазонов. Иначе новый диапазон добавлять изрядно тяжело.

   
 
 автор: Loki   (08.05.2007 в 00:37)   письмо автору
 
   для: Trianon   (08.05.2007 в 00:34)
 

Почему не подойдет... вроде вполне рабочий вариант получился... или возможен случай, когда он облажается?

   
 
 автор: rolands   (08.05.2007 в 00:50)   письмо автору
 
   для: Loki   (08.05.2007 в 00:37)
 

там чтота на подобиe приём у брача (брачеи много, пациентов тоже) к одному брачу в вибраний период времени может записатса один человек. У каждого врача есть рабозчие время когда он принимаэт пациентов и в етот период может записатса пациенты.

незнаю с BETWEEN получитса или нет

   
 
 автор: Trianon   (08.05.2007 в 10:31)   письмо автору
 
   для: Loki   (08.05.2007 в 00:37)
 

<?$sql"
SELECT servers.* FROM servers
  LEFT JOIN (SELECT server_id from reservations
   WHERE (
$res_start>= res_start AND $res_start < res_stop)
      OR ( res_stop >= 
$res_stop AND  res_start < $res_stop)
      ) AS except ON servers.server_id = except.server_id
      WHERE except.car_id IS NULL"
;

Вот этот оператор обеспечивает выборку свободных ресурсов, резервируемых интервалами времени. Если ты сможешь написать его компактнее через BETWEEN без нарушения логики - буду благодарен.

   
 
 автор: Loki   (08.05.2007 в 11:41)   письмо автору
 
   для: Trianon   (08.05.2007 в 10:31)
 

Если я ничего не напутал, то твой вариант не отслеживает ситуацию, когда существующий диапазон полностью перекрывается новым.

   
 
 автор: Trianon   (08.05.2007 в 13:47)   письмо автору
 
   для: Loki   (08.05.2007 в 11:41)
 

Вариант, когда существующий диапазон полностью перекрывается новым, это

  res_start < $res_start < $res_stop < res_stop


Получаем:


SELECT server_id from reservations 
   WHERE (1 AND 1) 
      OR ( 1  AND  1) 


Возвращает занятый server_id и NULL во внешнем селекте


SELECT servers.* FROM servers 
  LEFT JOIN (SELECT server_id ...)  AS except ON servers.server_id = except.server_id 
      WHERE except.car_id IS NULL"; 


мы не получим


SELECT servers.* FROM servers ....       WHERE 0; 

ergo: Занятый ресурс нам не отдадут.

   
 
 автор: Loki   (08.05.2007 в 14:24)   письмо автору
 
   для: Trianon   (08.05.2007 в 13:47)
 


res_start < $res_start < $res_stop < res_stop

это когда новый перекрывается старым, а старый новым это

$res_start < res_start < res_stop < $res_stop

   
 
 автор: Trianon   (08.05.2007 в 14:28)   письмо автору
 
   для: Loki   (08.05.2007 в 14:24)
 

И что - результат другой?
По-моему - тот же самый. :)

   
 
 автор: Loki   (08.05.2007 в 15:59)   письмо автору
 
   для: Trianon   (08.05.2007 в 14:28)
 


WHERE (0 AND 1)
      OR ( 0 AND  1)


или я чего-то не понимаю?

   
 
 автор: Trianon   (08.05.2007 в 16:24)   письмо автору
 
   для: Loki   (08.05.2007 в 15:59)
 

Посыпаю пеплом вешалку для кепки.
Исправлено.
<?$sql
SELECT servers.* FROM servers 
  LEFT JOIN (SELECT server_id from reservations 
   WHERE (
$res_start>= res_start AND $res_start < res_stop) 
      OR ( res_start >= 
$res_start AND  res_start < $res_stop
      ) AS except ON servers.server_id = except.server_id 
      WHERE except.car_id IS NULL"

   
 
 автор: Loki   (08.05.2007 в 16:42)   письмо автору
 
   для: Trianon   (08.05.2007 в 16:24)
 

Теперь у меня подкопаться не получается.... придется смириться:)

   
 
 автор: Trianon   (08.05.2007 в 16:56)   письмо автору
 
   для: Loki   (08.05.2007 в 00:19)
 

Итак, контрпример, показывающий, что конструкцией BETWEEN пользоваться не получится.
имеющиеся записи

(1, '2007-05-08 15:00:00', '2007-05-08 16:00:00'),
(1, '2007-05-08 17:00:00', '2007-05-08 18:00:00')


Резервируемый интервал (сюрприз!)

 ('2007-05-08 16:00:00', '2007-05-08 17:00:00'),

   
 
 автор: Loki   (08.05.2007 в 17:10)   письмо автору
 
   для: Trianon   (08.05.2007 в 16:56)
 

Да... тут бы строгое сравнение было очень кстати:)

   
Rambler's Top100
вверх

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