Всем привет! Есть таблица gruztr в ней столбцы data_in и sut_from. В data_in записана дата начала события, в sut_from количество дней в течении которых событие актуально начиная с даты начала события. Необходимо сделать запрос в котором будут выбираться значения начиная с определенной даты + несколько суток (по умолчанию стоит текущая дата). Отрывок страницы поиска: PHP: echo"<select name=day_from size=\"1\">"; //Формирую число поиска for ($i=1; $i<32; $i++) { if (date('d')==$i) $selected="selected"; else $selected=""; echo "<option $selected>".$i."</option>"; } echo"</select>"; echo"<select name=month_from size=\"1\">";//Формирую месяц поиска $mass=array('января','февраля','марта','апреля','мая','июня','июля','августа','сентября','октября','ноября','декабря'); for ($i=1; $i<13; $i++) { if (date('m')==$i) $selected="selected"; else $selected=""; echo "<option $selected>".$mass[($i-1)]."</option>"; } echo"</select>"; echo"<select name=year_from size=\"1\">";//Формирую год поиска for ($i=date('Y'); $i<(date('Y')+2); $i++) { if (date('Y')==$i) $selected="selected"; else $selected=""; echo "<option $selected>".$i."</option>"; } echo"</select>"; echo"<select name=sut_from size=\"1\">";//плюс сколько суток от выбранной даты (7 значений на выбор) $selected=""; $mass=array(1,2,3,5,7,14,30); for ($i=0; $i<7; $i++) { if ($i==2) $selected="selected"; else $selected=""; echo "<option $selected>".$mass[$i]."</option>"; } echo"</select>"; Страница куда отправляет форма: PHP: $mass=array('января'=>'01','февраля'=>'02','марта'=>'03','апреля'=>'04','мая'=>'05','июня'=>'06','июля'=>'07','августа'=>'08','сентября'=>'09','октября'=>'10','ноября'=>'11','декабря'=>'12'); echo "<pre>"; $month=$mass[$_POST['month_from']]; echo "</pre>"; $data_in=$_POST['year_from']."-".$month."-".$_POST['day_from']; //привожу дату начала поиска в буржуйский вид YYYY-mm-dd $data_from=date("Y-m-d",strtotime($data_in) + $_POST['sut_from']*86400);//определяю дату конца поиска $data="$data_in>=data_in AND $data_from<=DATE_ADD(data_in, INTERVAL sut_from day)"; //формирую часть запроса $query_1="SELECT * FROM gruztr WHERE $data ORDER BY id_gruztr DESC";//сам запрос Вся проблема в 7-й строке обработчика формы. Ввожу сегодняшнюю дату (22 января 2008г)+3 дня. В базе точно есть запись, удовлетворяющая условию поиска (22.01.08-25.01.08), но она не находится. В чем ошибка? Кто может подскажите, уже мозгов не хватает!
Что я и сделал: [sql]SELECT * FROM gruztr WHERE 2008-01-22>=data_in AND 2008-01-25<=DATE_ADD(data_in, INTERVAL sut_from day) ORDER BY id_gruztr DESC[/sql] Это результат, что тут не правильно?
что неправильно - ты должен посмотреть сам, какую ошибку скажет мускул. И пока запрос не будет давать правильный результат - лезть в ту мешанину что ты нагородил выше смысла нет никакого.
КА-ВЫЧ-КИ! Вот какой я ожидал ответ, но сам его нашел. Все равно спасибо, приятно знать что тебе рады помочь
Ура, хоть кто-то попытался сделать сам. Если еще запомнишь путь, по которому находятся ответы - будет вообще зашибись.
Запрос с выборкой даты: мучения продолжаются Запрос с выборкой даты: мучения продолжаются!!! ХЭЛП!!! Даже изобразил схему: 21...27 - это числа месяца. Событие актуально с 22 по 25-е число и записано в БД. Я нарисовал 3 варианта поиска, которые должны найти это событие в БД. 1 вариант (красный), когда нижняя граница поиска (a) попадает в диапазон события, а верхняя (b) нет. 2 вариант (синий), наоборот, (a) не попадает в диапазон поиска, а (b) попадает. 3 вариант (зеленый), когда обе границы попадают в диапазон поиска. Для точности надо сказать, что есть и 4-й вариант, когда нижняя граница поиска ниже нижней границы записи, а верхняя выше выше верхней (на рисунке не изображено). Пожалуйста помогите написать логику запроса, в котором запись находится, если поиск хотябы частично ее цепляет (т.е. любой из 4-х вариантов). В своих вариантах запросов я запутался, нужна свежая мысль.
Я вот как попробовал: PHP: $data="AND ('$data_in'<=data_in AND DATE_ADD(data_in, INTERVAL sut_from day)>='$data_from' AND '$data_from'>=data_in)"; $data=$data."OR (data_in<='$data_in' AND DATE_ADD(data_in, INTERVAL sut_from day)>='$data_from')"; $data=$data."OR ('$data_in'>=data_in AND '$data_from'>=DATE_ADD(data_in, INTERVAL sut_from day) AND '$data_in'<=DATE_ADD(data_in, INTERVAL sut_from day))"; $data=$data."OR (data_in>='$data_in' AND '$data_from'>=DATE_ADD(data_in, INTERVAL sut_from day))"; $query_1="SELECT * FROM gruztr WHERE $data ORDER BY id_gruztr DESC"; Т.е. все 4 варианта, иначе никак. Пока вроде работает, но надо еще погонять. Блин, опять все сам сделал. Вроде не пишу в форум, думаю что сам справлюсь, потом ступор, жалобное послание к гуру, а уж потом озарение.