Joomla中的MYSQL搜索查询

时间:2012-12-06 11:09:04

标签: php mysql joomla

我正在编辑一个(非常混乱的!)自定义AJAX过滤器组件,以便用户能够按时间(早上,下午,晚上)搜索事件的时间。系统当前按小时(12,08等)搜索记录,并使用过滤中提交的小时对数据库执行LIKE搜索以返回结果。

我已将时间分组到时间数组中,如下所示:在过滤模型中:

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.'%"');
     }

我需要更改它的查询以便能够搜索数据库以检查数据库'time'字段中的值是否在我的$ times数组中并且还执行类似,因为它只是前两个字符的我需要匹配的字符串。这是因为数据库中的值可能会有所不同(15.30,15.45等),但只需要匹配小时(15)。

我尝试循环遍历数组中的项目,创建“like”和“or”查询,但没有成功。有人有什么想法吗? 非常感谢

2 个答案:

答案 0 :(得分: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']);

答案 1 :(得分: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.'%"');  

}