|
|
|
|
|
для: Trianon
(24.12.2010 в 02:38)
| | >На открытых отрезках оно вычисляется на раз.
>На закрытых - нудно и противно.
>А если это вычисление нужно в условие JOIN ON закатать, так там вообще крышка настает.
Тема интересная, важная. Надо будет в отдельный топик вынести, наверняка ещё много кому понадобится. | |
|
|
|
|
|
|
|
для: Zilog
(24.12.2010 в 01:45)
| | Если есть интервалы времени, обычно (при добавлении очередного интервала чаще всего, но не только) приходится решать задачи вычисления пересечения интервалов, а иногда разности и объединения.
Дано: ааааааааааааа
bbbbbbbb
Найти: ссссс
|
На открытых отрезках оно вычисляется на раз.
На закрытых - нудно и противно.
А если это вычисление нужно в условие JOIN ON закатать, так там вообще крышка настает. | |
|
|
|
|
|
|
|
для: Лена
(22.12.2010 в 13:57)
| | может поможет http://red-stones.ru/test/reserve/ | |
|
|
|
|
|
|
|
для: Лена
(24.12.2010 в 01:39)
| | >Как мне правильно разложить таблицу по горизонтали?
>Если кто-то делал, помогите, пожалуйста.
Лена, почитайте, что мы с Трианоном тут наговорили. Боюсь, если вы не внесётсе на этом этапе существенные изменения в логику работы вашего алгоритма, потом вам придётся очень много переделывать. А таблицу разложить всегда можно успеть.
Да, думаю задачка не так проста, как она вам представляется. | |
|
|
|
|
|
|
|
для: Trianon
(24.12.2010 в 01:34)
| | >Неужто давнее, чем у меня? :)
не думаю, скорее всего у меня в этой части мозга регенерация памяти нестабильно работает :)
>к примеру, эта неделя (по российской локали):
>Закрытый отрезок [20 декабря .... 26 декабря]
>Открытый отрезок [20 декабря .... 27 декабря[
ясно, спасибо. Я хранил данные закрытыми отрезками. Сейчас выясняется, что лучше открытыми. Чем? Как это упростит работу?
В своей админке я сделал так: юзер задаёт только даты начала периодов. Конечная дата ("закрытая") вычисляется автоматически. Проблем с расчётом цен по сезонам особых не помню (только на гринвича пришлось перейти), алгоритм получился не такой уж и сложный. Так чем открытые даты могут упростить код?
>Иначе код, вычисления пересечения окажется сильно сложным, соответственно
>усложнятся запросы по условию наложения интервалов, а значит и прикладной код
>добавления нового интервала.
Вот как у меня это работало:
код нашёл, но что то он слишком великоват, что бы его сюда постить. может дейстительно стоит подумать над оптимизацией? :)
|
| |
|
|
|
|
 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>
|
Как мне правильно разложить таблицу по горизонтали?
Если кто-то делал, помогите, пожалуйста. | |
|
|
|
|
|
|
|
для: 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 кроме даты сложно что-то сунуть. Хотя с точными моментами возни меньше. | |
|
|
|
|
|
|
|
для: Trianon
(24.12.2010 в 00:21)
| | >момент завершения периода тоже хранить нужно.
ну, так так и храним. Я не понял формулировку про "открытые отрезки". Что значит открытые? Не серчай, 4 класс давно был :)
>>для Лены: и ещё, у вас возможно всплывёт вопрос с високосными годами и минутами-
>Ниичего там не всплывет. (То есть всплывет, и многое, оно всяко не это :))
>моменты времени абсолютные, потому что цены привязаны к сезонам конкретного года.
Ну как не всплывёт? Если время в начало/конец периода указывать 00:00:00/23:59:59, то конечно не всплывёт. А если просто датами оперировать - то всплывёт, ибо при записи в БД он туда текущую сунет. А тут это важно — ибо расчёт в гостиницах требует точности, более того, там ещё куча нюансов. Например, если ОТ в этом году, ДО - в следующем. Или между ОТ и ДО целиком несколько периодов, но это уже другая задача.
upd1. Да, ещё помню был геморой с переводом часов в летнее/зимнее время — так вообще пришлось к грнвичу прибегнуть.
upd2. Да, високосные не причём. Перепутал с переводом стрелок, а то помню что с чем-то намучился :) | |
|
|
|
|
|
|
|
для: Zilog
(24.12.2010 в 00:11)
| | >>Только интервалы удобнее задавать открытыми справа отрезками. [a b[
>ммм... то есть?
математика, 4-й класс.
только даты начала периода?
только дата начала - это уже луч.
почему?
момент завершения периода тоже хранить нужно.
>для Лены: и ещё, у вас возможно всплывёт вопрос с високосными годами и минутами-секундами.
Ниичего там не всплывет. (То есть всплывет, и многое, оно всяко не это :))
моменты времени абсолютные, потому что цены привязаны к сезонам конкретного года. | |
|
|
|
|
|
|
|
для: Trianon
(23.12.2010 в 23:56)
| | >Только интервалы удобнее задавать открытыми справа отрезками. [a b[
ммм... то есть? только даты начала периода?
но ведь это не отменяет проблему смены года.
для Лены: и ещё, у вас возможно всплывёт вопрос с високосными годами и минутами-секундами. | |
|
|
|
|