2012-12-06 4 views
0

사용자가 시간의 이벤트 (오전, 오후, 저녁)를 검색 할 수 있도록 사용자 지정 AJAX 필터 구성 요소를 편집하고 있습니다. 시스템은 현재 시간대 (12, 08 등)로 레코드를 검색하고 필터링에서 제출 된 시간을 사용하여 데이터베이스에서 LIKE 검색을 수행하여 결과를 반환합니다.Joomla의 MYSQL 검색 쿼리

필터링의 모델에서 다음과 같이 나는 시간의 일 배열로 시간 그룹화 한 :

다음과
if($time == 'morning') { 
     $times = array('07', '08', '09', '10', '11'); 
    } 
    if($time == 'afternoon') { 
     $times = array('12', '13', '14', '15', '16'); 
    } 
    if($time == 'evening') { 
     $times = array('17', '18', '19', '20', '21'); 
    } 

사용되는 현재 쿼리가 될 때 :

if ($time>0){ 
     $query->where('a.startTime LIKE "%'.$time.'%"'); 
    } 

내가 필요 그것에 대한 쿼리를 변경하여 데이터베이스 '시간'필드의 값이 my $ times 배열에 있는지 여부를 확인하고 일치해야하는 문자열의 처음 두 문자 만 같은지 확인하십시오 . 이것은 데이터베이스의 값이 다양 할 수 있기 때문에 (15.30, 15.45 등) 시간 (15) 만 일치해야하기 때문입니다.

'좋아요'와 '또는'검색어를 만들지 만 성공하지 못하는 항목을 반복적으로 나열 해 보았습니다. 아무도 아이디어가 있니? 많은 감사

답변

1
$per=array('morning'=>array(7, 8, 9, 10, 11), 
      'afternoon'=>array(12, 13, 14, 15, 16), 
      'evening'=>array(17, 18, 19, 20, 21)); 

$query->where('HOUR(a.startTime) IN ('.implode(',',$per[$need].')'); 

또는

$per=array('morning'=>array('min'=>7, 'max'=>11), 
      'afternoon'=>array('min'=>12,'max'=> 16), 
      'evening'=>array('min'=>17,'max'=> 21)); 

$query->where('HOUR(a.startTime) >= '.$per[$need]['min'].' and HOUR(a.startTime)<='.$per[$need]['max']); 
+0

화려한 감사합니다! – devoncrazylegs

0

어쩌면이

$time=15.30;//for example 
if ($time>0){ 
    $time=preg_replace('~\.(.*?$)~','',$time);//time is now 15 

    $morning = array('07', '08', '09', '10', '11'); 
    $afternoon = array('12', '13', '14', '15', '16'); 
    $evening = array('17', '18', '19', '20', '21'); 
    if(in_array($time,$morning)){ 
     echo 'morning'; 
    }else if(in_array($time,$afternoon)){ 
     echo 'afternoon'; 
    }else if(in_array($time,$evening)){ 
     echo 'evening'; 
    } 

    $query->where('a.startTime LIKE "%'.$time.'%"'); 

같은}

+0

안녕, 검색 할 때 그 만드는 경우 (손질해야하는 데이터베이스 값입니다 감각?) – devoncrazylegs

+0

그럼 $ time = 15.30; db 값으로? – vodich