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

Форум MySQL

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

 

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

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

тема: Проектирование базы

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

 
 автор: Zilog   (24.12.2010 в 15:12)   письмо автору
 
   для: Trianon   (24.12.2010 в 02:38)
 

>На открытых отрезках оно вычисляется на раз.
>На закрытых - нудно и противно.
>А если это вычисление нужно в условие JOIN ON закатать, так там вообще крышка настает.

Тема интересная, важная. Надо будет в отдельный топик вынести, наверняка ещё много кому понадобится.

  Ответить  
 
 автор: Trianon   (24.12.2010 в 02:38)   письмо автору
 
   для: Zilog   (24.12.2010 в 01:45)
 

Если есть интервалы времени, обычно (при добавлении очередного интервала чаще всего, но не только) приходится решать задачи вычисления пересечения интервалов, а иногда разности и объединения.
Дано:           ааааааааааааа
             bbbbbbbb

Найти:          ссссс


На открытых отрезках оно вычисляется на раз.
На закрытых - нудно и противно.
А если это вычисление нужно в условие JOIN ON закатать, так там вообще крышка настает.

  Ответить  
 
 автор: deimand   (24.12.2010 в 02:30)   письмо автору
 
   для: Лена   (22.12.2010 в 13:57)
 

может поможет http://red-stones.ru/test/reserve/

  Ответить  
 
 автор: Zilog   (24.12.2010 в 01:47)   письмо автору
 
   для: Лена   (24.12.2010 в 01:39)
 

>Как мне правильно разложить таблицу по горизонтали?
>Если кто-то делал, помогите, пожалуйста.

Лена, почитайте, что мы с Трианоном тут наговорили. Боюсь, если вы не внесётсе на этом этапе существенные изменения в логику работы вашего алгоритма, потом вам придётся очень много переделывать. А таблицу разложить всегда можно успеть.

Да, думаю задачка не так проста, как она вам представляется.

  Ответить  
 
 автор: Zilog   (24.12.2010 в 01:45)   письмо автору
 
   для: Trianon   (24.12.2010 в 01:34)
 

>Неужто давнее, чем у меня? :)
не думаю, скорее всего у меня в этой части мозга регенерация памяти нестабильно работает :)

>к примеру, эта неделя (по российской локали):
>Закрытый отрезок [20 декабря .... 26 декабря]
>Открытый отрезок [20 декабря .... 27 декабря[

ясно, спасибо. Я хранил данные закрытыми отрезками. Сейчас выясняется, что лучше открытыми. Чем? Как это упростит работу?

В своей админке я сделал так: юзер задаёт только даты начала периодов. Конечная дата ("закрытая") вычисляется автоматически. Проблем с расчётом цен по сезонам особых не помню (только на гринвича пришлось перейти), алгоритм получился не такой уж и сложный. Так чем открытые даты могут упростить код?

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

Вот как у меня это работало:

код нашёл, но что то он слишком великоват, что бы его сюда постить. может дейстительно стоит подумать над оптимизацией? :)

  Ответить  
 
 автор: Лена   (24.12.2010 в 01:39)   письмо автору
26 Кб
 
   для: Zilog   (24.12.2010 в 01:14)
 

У меня формат даты в базе - date.
Только что поиск дописала, запросы были типа:
SELECT *
FROM rnt1_room_attrs
WHERE id_hotel =1
AND (
(
date_start >= '2010-12-01'
AND date_start < '2010-12-24'
)
OR (
date_end >= '2010-12-01'
AND date_end < '2010-12-24'
)
)
AND price <=100
LIMIT 0 , 20

Не получается разложить таблицу в админке. Диапазоны дат - указала, цены неправильно выводятся. В чем проблема, я поняла, как из нее выйти, не знаю.
Должно получиться так, как на картинке - см. аттач. Значения, обведенные красным, не должны быть - здесь окна должны быть пустыми.
Как делала.
Вывела даты в шапке, берем диапазоны, которые принадлежат определенному отелю:
$q2 = "SELECT * FROM rnt1_room_attrs WHERE id_hotel=" . $row['hid'];
дальше в цикле я вывожу шапку.
Цены мне надо вывести ниже, причем сделать столько столбцов. как в шапке.
Делаю ниже еще раз этот запрос, и опять вывожу в цикле цены.
И получается, что у меня во всех ячейках - одинаковые значения. Т.е. там, где за определенный диапазон даты цены нет(в ячейке должно быть пусто), у меня заполнено.
Привожу кусок кода, который выводит одну строку таблицы:
ТИП КОМНАТЫ- ЦЕНЫ ЗА ПЕРИОДЫ


            <tr bgcolor="#DFE0FF">
            <td align="center" >
                <input type="checkbox" name="sel[]" value="<?php print $row1['id']?><?php print $checked;?>>
            </td>
                <td  width="300" align="center"><nobr><span style="padding:7px;">
                <?php print $row1['type_room']?></span></nobr>
                </td>
                <td>
                <table border="1" width="100%" cellpadding=5 cellspacing=0><tr>
<?php

                $qw 
"SELECT * FROM rnt1_room_attrs rra1
                WHERE id_hotel=" 
$row['hid'];
                
$resw mysql_query($qw);
                if(!
$res5) exit("Error in " $qw mysql_error());

              while(
$roww=mysql_fetch_assoc($resw)){

                if(
ЗДЕСЬ НАДО ЗАДАТЬ ДЛЯ ЦЕНЫ УСЛОВИЕЧТОБЫ СОГЛАСОВАТЬ ЦЕНУ С ДАТОЙ){
?>
                    <td width="50" align="center"><input type="text" value="<?php print $roww['price']?>" name="price1"></td>
<?php
                
}else{

?>                   <td width="50" align="center"><input type="text" value="" name="price1"></td>

<?php
                
}
                }
?>
            </tr></table>
            </td>
            </tr>


Как мне правильно разложить таблицу по горизонтали?
Если кто-то делал, помогите, пожалуйста.

  Ответить  
 
 автор: Trianon   (24.12.2010 в 01:34)   письмо автору
 
   для: Zilog   (24.12.2010 в 01:14)
 

>>момент завершения периода тоже хранить нужно.
>
>ну, так так и храним. Я не понял формулировку про "открытые отрезки". Что значит открытые? Не серчай, 4 класс давно был :)

Неужто давнее, чем у меня? :)

к примеру, эта неделя (по российской локали):
Закрытый отрезок [20 декабря .... 26 декабря]
Открытый отрезок [20 декабря .... 27 декабря[

Эти сутки:
Закрытый отрезок: [24дек/00:00 ... 24дек/23:59]
Открытый отрезок [24дек/00:00 ... 25дек/00:00[
и т.п.


>>>для Лены: и ещё, у вас возможно всплывёт вопрос с високосными годами и минутами-
>>Ниичего там не всплывет. (То есть всплывет, и многое, оно всяко не это :))
>>моменты времени абсолютные, потому что цены привязаны к сезонам конкретного года.
>
>Ну как не всплывёт? Если время в начало/конец периода указывать 00:00:00/23:59:59, то конечно не всплывёт. А если просто датами оперировать - то всплывёт, ибо при записи в БД он туда текущую сунет.
В поле data кроме даты сложно что-то сунуть. Хотя с точными моментами возни меньше.

  Ответить  
 
 автор: Zilog   (24.12.2010 в 01:14)   письмо автору
 
   для: Trianon   (24.12.2010 в 00:21)
 

>момент завершения периода тоже хранить нужно.

ну, так так и храним. Я не понял формулировку про "открытые отрезки". Что значит открытые? Не серчай, 4 класс давно был :)

>>для Лены: и ещё, у вас возможно всплывёт вопрос с високосными годами и минутами-
>Ниичего там не всплывет. (То есть всплывет, и многое, оно всяко не это :))
>моменты времени абсолютные, потому что цены привязаны к сезонам конкретного года.

Ну как не всплывёт? Если время в начало/конец периода указывать 00:00:00/23:59:59, то конечно не всплывёт. А если просто датами оперировать - то всплывёт, ибо при записи в БД он туда текущую сунет. А тут это важно — ибо расчёт в гостиницах требует точности, более того, там ещё куча нюансов. Например, если ОТ в этом году, ДО - в следующем. Или между ОТ и ДО целиком несколько периодов, но это уже другая задача.

upd1. Да, ещё помню был геморой с переводом часов в летнее/зимнее время — так вообще пришлось к грнвичу прибегнуть.

upd2. Да, високосные не причём. Перепутал с переводом стрелок, а то помню что с чем-то намучился :)

  Ответить  
 
 автор: Trianon   (24.12.2010 в 00:21)   письмо автору
 
   для: Zilog   (24.12.2010 в 00:11)
 

>>Только интервалы удобнее задавать открытыми справа отрезками. [a b[
>ммм... то есть?
математика, 4-й класс.

только даты начала периода?
только дата начала - это уже луч.
почему?
момент завершения периода тоже хранить нужно.

>для Лены: и ещё, у вас возможно всплывёт вопрос с високосными годами и минутами-секундами.

Ниичего там не всплывет. (То есть всплывет, и многое, оно всяко не это :))
моменты времени абсолютные, потому что цены привязаны к сезонам конкретного года.

  Ответить  
 
 автор: Zilog   (24.12.2010 в 00:11)   письмо автору
 
   для: Trianon   (23.12.2010 в 23:56)
 

>Только интервалы удобнее задавать открытыми справа отрезками. [a b[

ммм... то есть? только даты начала периода?
но ведь это не отменяет проблему смены года.

для Лены: и ещё, у вас возможно всплывёт вопрос с високосными годами и минутами-секундами.

  Ответить  

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

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

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