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

Форум MySQL

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

 

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

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

тема: skript rezervaciji

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

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

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

   
 
 автор: 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 в 16:42)   письмо автору
 
   для: Trianon   (08.05.2007 в 16:24)
 

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

   
 
 автор: 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 в 15:59)   письмо автору
 
   для: Trianon   (08.05.2007 в 14:28)
 


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


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

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

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

   
 
 автор: 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 в 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 в 11:41)   письмо автору
 
   для: Trianon   (08.05.2007 в 10:31)
 

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

   
 
 автор: 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 без нарушения логики - буду благодарен.

   

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

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

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