Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Query - вывод бд таблиц между конкретных дат. 
:(
    Опции темы
dailik
Дата 16.9.2012, 12:47 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.12.2008

Репутация: нет
Всего: нет



Нужно реализовать вот что:
по календарю чел выберает дату -с и -до
нажимает ОК и скрипт ищет -с это 'start_date' -до это 'expire_date'
сейчас скрипт такой

Код

select * from d_books where 
   start_date <=  '$start' 
AND 
  expire_date >= '$expire'
и т.д.



есть числа (start_date 2012-09-16) до (expire_date 2012-09-25) там есть инфа

если что-то есть в бд (с 2012-09-16 до 2012-09-25) выводится сообщение "занято" все работает,
вопрос вот в чем как реализовать если чел выбрал даты (с 2012-09-20 до 2012-09-30) или (с 2012-09-10 до 2012-09-18...
скрипт что я написал уже не работает в таком случае

тоесть получается нужно както проверять и одно число слева или справа а не 2 разом,
кто сталкивался может есть решение ?
PM MAIL   Вверх
Sanchezzz
Дата 16.9.2012, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



еще раз прочитайте свой вопрос и перефразируйте а то честно не понял суть вопроса.








--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
dailik
Дата 16.9.2012, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.12.2008

Репутация: нет
Всего: нет



если я у меня в базе заполненны данные с числа 16 по 25 и я ищу с сайта 
например выбрав число с 17 по 24 то скрипт выводит ошибку что в данные даты обьект занят
если выбрать 20-22 тоже выводится нужное сообщение,

но если я выберу число с 10 по 19 например, то мне выводится сообщение что можно забронировать когда у меня с 16 по 25 занято! 
значит с 10 по 15 можно а вот 16,17,18,19 занято 
тоесть число "19" не проверилось...

надеюсь понятно ?  : )

Это сообщение отредактировал(а) dailik - 16.9.2012, 13:11
PM MAIL   Вверх
Sanchezzz
Дата 16.9.2012, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 41
Всего: 60



сравнивайте только с одним полем expire_date от expire_date и до expire_date

Код

$sql = "SELECT * FROM `d_books` WHERE `expire_date` BETWEEN '$start' AND '$expire' LIMIT 1";


либо я опять вас не понял)

Это сообщение отредактировал(а) Sanchezzz - 16.9.2012, 13:29


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
dailik
Дата 16.9.2012, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.12.2008

Репутация: нет
Всего: нет



это не то,
еслиб у меня было в бд только expire тогда еще можно но у меня start и рядом expire

нужно сделать так чтоб если выбранное число start или expire попадает в те числа которые имеются в бд то выводило сообщение что одно из чисел занято, а щас скрипт проверяет только 2 числа вместе, а по одному не проверяет. 
 
я добавляя обьект указываю с какого(start) числа до какого(expire) числа он занят,
если человек выберит даты в которые уже занят обьект и оплатит тогда беда...

может мне опеределять числа между ними и  через цикл проверять как то ? 

прикрепил снимок с бд



Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  Снимок.PNG 14,65 Kb
PM MAIL   Вверх
ksnk
Дата 16.9.2012, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



dailik, Тренируйтесь объяснять задачу другим людям. В жизни очень пригодится.

Насколько я понял, в базе храниться информация о "свободности" неких ресурсов (для определенности назовем их "номер в гостинице") и требуется зарезервировать их клиенту (туристу), Турист указывает диапазон дат, когда он намерен появится в гостинице и нужно выбрать все свободные номера.

Цитата(dailik @  16.9.2012,  12:47 Найти цитируемый пост)
вопрос вот в чем как реализовать если чел выбрал даты (с 2012-09-20 до 2012-09-30) или (с 2012-09-10 до 2012-09-18...
скрипт что я написал уже не работает в таком случае

Тоесть туриста на пару дней можно подселить в один номер, а потом на оставшееся время - в другой?



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
dailik
Дата 16.9.2012, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.12.2008

Репутация: нет
Всего: нет



Цитата(ksnk @  16.9.2012,  14:04 Найти цитируемый пост)
Тоесть туриста на пару дней можно подселить в один номер, а потом на оставшееся время - в другой?


нет просто вывести сообщение что занято.

ну как мне еще обьяснить 

давайте начнем с того что вот этот скрипт проверяет ?
Код

$q=mysql_query("select * from `current_books` where    `start` <=  '$start' AND   `expire` >= '$expire'");
if($the=mysql_fetch_array($q){
   echo "Zanyato";
}
else
{
   echo "Svobodno";
}



он проверяет 
допустим на сайте выбрал числа с 1 сентября до 5 сентября,

нажимаю ок и 
скрипт проверит 
  start_date <=  '1 сентября' 
AND 
  expire_date >= '5 сентября'

допустим у меня в базе current_books есть строка в которой находится 
 
id------Start ------------|----- Expire-----------Price
587---3 сентября-----|-----4 сентября------400$

скрипт выведет Zanyato так ?


Это сообщение отредактировал(а) dailik - 16.9.2012, 14:20
PM MAIL   Вверх
rodnover
Дата 16.9.2012, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 1
Всего: 10



По-идее полностью свободных варианов только 2:

1. d_books.start_date > $expire
2. d_books.expire_date < $start

частичная занятость:

если d_books.start_date > $start, то свободны все дни от $start до d_books.start_date, если d_books.expire_date < $expire - свободны все дни от d_books.expire_date до $expire.

Код

select datediff(d_books.start_date, '$start')
    , datediff('$expire', d_books.expire_date)
from d_books
where (datediff(d_books.start_date, '$start')> 0)
    or (datediff('$expire', d_books.expire_date) > 0)


Выведет количество свободных дней от начала периода требования до начала чего-то там (что в d_books хранится)  и от конца чего-то там, до конца периода требования.

Примерно так, надеюсь, суть ясна.

Это сообщение отредактировал(а) rodnover - 16.9.2012, 14:30
PM MAIL   Вверх
ksnk
Дата 16.9.2012, 14:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 96
Всего: 386



Цитата(dailik @  16.9.2012,  12:47 Найти цитируемый пост)
сейчас скрипт такой

Код

select * from d_books where 
   start_date <=  '$start' 
AND 
  expire_date >= '$expire'

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



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
dailik
Дата 16.9.2012, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.12.2008

Репутация: нет
Всего: нет



Цитата(rodnover @  16.9.2012,  14:26 Найти цитируемый пост)
select datediff(d_books.start_date, '$start')
    , datediff('$expire', d_books.expire_date)
from d_books
where (datediff(d_books.start_date, '$start')> 0)
    or (datediff('$expire', d_books.expire_date) > 0)


я вставил этот скрипт но попрежнему почти также получается,
и попробовал поменять <= >= 

давай венемся к моему скрипту вот 
Цитата(dailik @  16.9.2012,  14:17 Найти цитируемый пост)
скрипт выведет Zanyato так ?

это с 1 сентября по 5 сентября по сути 2 дня заняты значит все верно выводит и говорит что занято,

а если я выберу с 3 сентября по 15 сентября то скрипт мне выводит что свободно!
но не свободно потому что 3-4 сентября занято, 
вот мне нужно чтоб опознал ети 2 дня и сказал что занято...

если и щас никто не поймет то всеравно всем большое спасибо )))
пойду и буду писать скрипт который каждый день будет вносить в бд и по ним будут проверять когда занято...


PM MAIL   Вверх
rodnover
Дата 16.9.2012, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 1
Всего: 10



Это не рабочий скрипт - это идея. На вывод свободных дней, если не весь период занят. Я просто понял, что нужно указать пользователю свободный регион. Для вывода только если полностью свободный период проверяй по этими условиями

Цитата(rodnover @  16.9.2012,  18:26 Найти цитируемый пост)
По-идее полностью свободных варианов только 2:

1. d_books.start_date > $expire
2. d_books.expire_date < $start


Код

select *
from d_books
where d_books.start_date < $expired
    and d_books.expired_date > $start


Если этот код вернет хоть одну запись, значит, в указанном периоде что-то занято. Если не вернет ни одной - период полностью свободен.

P.S. полезно рисовать интервалы, как 7 классе на алгербре, для решения неравенств.
PM MAIL   Вверх
dailik
Дата 16.9.2012, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 24
Регистрация: 30.12.2008

Репутация: нет
Всего: нет



Цитата(rodnover @  16.9.2012,  15:02 Найти цитируемый пост)
rodnover

оо !! вроде получилось щас буду тестить с датами, спасибо тебе большое!!! 
PM MAIL   Вверх
rodnover
Дата 16.9.2012, 19:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: 1
Всего: 10



Всегда пожалуйста. 

Правильно заданный вопрос - 50% решения задачи. smile
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0932 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.