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

Форум MySQL

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

 

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

вид форума:
Линейный форум Структурный форум

тема: Фильтрация результатов запроса к базе данных интервалом дат
 
 автор: pelevin   (04.10.2008 в 15:30)   письмо автору
22.5 Кб
 
 

Люди знающие, помогите пожалуйста, разобраться с кодом запроса ДБ который в настоящее время работает неверно.
Имеетса таблица в ДБ в которую занесены несколько тысяч слетов *(Events) с датой начала слета и датой конца, слеты проводят различные кролиководы из разных обьединений и обществ. Таблица показана на картинке тут: http://www.kleintiernews.de/images/forum_help/tabelle_kalender.gif ,a маска фильтра поиска тут: http://www.kleintiernews.de/images/forum_help/suche.gif .
В данный момент для фильтрации применяеться следующая функция составляющая запрос в ДБ, но она выдает неверные результаты, т.к. не учтены разные месяцы и годы, т.е. она как бы верна но только для случая когда месяц и год в интервале фильтра одинаков.

Дата записана в ДБ в видете слова 31.01.2008 (ее приходиться разрезать на составные части)

$verbandliste это название клуба или если равно 1 то все клубы

$von_t - день начала интервала поиска даты
$von_m - месяц начала интервала поиска даты
$von_y - год начала начала интервала поиска даты
$bis_t - день конца интервала поиска даты
$bis_m - месяц конца интервала поиска даты
$bis_y - год конца интервала поиска даты
$id ID слета в DB
$start


<? 

function showKalender($verbandliste,$von_t,$von_m,$von_y,$bis_t,$bis_m,$bis_y,$id,$start) {

    
$monataktuel date("m",time());

        
$anzahl_pro_zeile 13// Anzahl pages im PAGIN Men&#252;
        
$display=10// Anzeigen pro 1 Seite
        
        
$akt_zeilen_cont 0;                
        
        if ( 
$verbandliste != "" && $von_t != "" && $von_m != "" && $von_y != ""  && $bis_t != "" && $bis_m != "" && $bis_y != "" ) {
        
        
$query="SELECT * FROM menu WHERE id=".$id;
        
$result=mysql_query($query);
        
$row=mysql_fetch_array($result);
        
$title=$row['text'];
        echo 
"<tr><td><span class='headlines'>".$title."<br><br></span></td></tr>";    

        if ( 
$verbandliste == 1) {
        
        
$query="SELECT * FROM kalender WHERE 
        
        menu_id="
.$id.
        
        AND 
        
        LPAD( SUBSTRING_INDEX( beginn, '.', 1 ) , 2, '0' )   >=  
$von_t  
        
        AND 
        
        LPAD( SUBSTRING_INDEX( beginn, '.', 1 ) , 2, '0' )   <=  
$bis_t  
        
        AND 

        LPAD( SUBSTRING_INDEX( SUBSTRING_INDEX( beginn, '.', 2 ) , '.', -1 ) , 2, '0' )   >=  
$von_m  
        
        AND 

        LPAD( SUBSTRING_INDEX( SUBSTRING_INDEX( beginn, '.', 2 ) , '.', -1 ) , 2, '0' )   <=  
$bis_m 
        
        AND 
        
        SUBSTRING_INDEX( beginn, '.', -1 )   >=  
$von_y  
        
        AND 
        
        SUBSTRING_INDEX( beginn, '.', -1 )   <=  
$bis_y          


        ORDER BY SUBSTRING_INDEX( beginn, '.', -1 ) , LPAD( SUBSTRING_INDEX( SUBSTRING_INDEX( beginn, '.', 2 ) , '.', -1 ) , 2, '0' ) , LPAD( SUBSTRING_INDEX( beginn, '.', 1 ) , 2, '0' )"
;
        
        } else {
        
        
$query="SELECT * FROM kalender 
        
        
        WHERE 
        
        menu_id="
.$id.
        
        AND 
        
        LPAD( SUBSTRING_INDEX( beginn, '.', 1 ) , 2, '0' )   >=  
$von_t  
        
        AND 

        LPAD( SUBSTRING_INDEX( SUBSTRING_INDEX( beginn, '.', 2 ) , '.', -1 ) , 2, '0' )   >=  
$von_m  
        
        AND 
        
        SUBSTRING_INDEX( beginn, '.', -1 )   >=  
$von_y  
        
        AND 
        
        LPAD( SUBSTRING_INDEX( beginn, '.', 1 ) , 2, '0' )   <=  
$bis_t  
        
        AND 

        LPAD( SUBSTRING_INDEX( SUBSTRING_INDEX( beginn, '.', 2 ) , '.', -1 ) , 2, '0' )   <=  
$bis_m  
        
        AND 
        
        SUBSTRING_INDEX( beginn, '.', -1 )   <=  
$bis_y          

        AND 
        
         beschreibung5 LIKE '%"
.$verbandliste."%' 
        
        ORDER BY SUBSTRING_INDEX( beginn, '.', -1 ) , LPAD( SUBSTRING_INDEX( SUBSTRING_INDEX( beginn, '.', 2 ) , '.', -1 ) , 2, '0' ) , LPAD( SUBSTRING_INDEX( beginn, '.', 1 ) , 2, '0' )"
;
        
        }

        
$result=mysql_query($query);
        

}



Помогите пожалуйста дополнить функцию что бы она правильно работала.

  Ответить  
 
 автор: Trianon   (04.10.2008 в 17:41)   письмо автору
 
   для: pelevin   (04.10.2008 в 15:30)
 

И есть малейшая причина держать дату в БД в таком формате?

  Ответить  
 
 автор: pelevin   (05.10.2008 в 19:23)   письмо автору
 
   для: Trianon   (04.10.2008 в 17:41)
 

спасибо!!!

  Ответить  
Rambler's Top100
вверх

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