0

私は現在、ユーザーが時刻(朝、午後、夕方)でイベントの時刻を検索できるようにするために、(非常に厄介な!)カスタムAJAXフィルターコンポーネントを編集しています。システムは現在、1日の時間(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配列にあるかどうかを確認し、必要な文字列の最初の2文字だけであるため、同様の処理を実行できるように、クエリを変更する必要があります。一致する。これは、データベースの値が変化する可能性があるため(15.30、15.45など)、時間(15)と一致する必要があるだけであるためです。

配列内のアイテムをループして「like」および「or」クエリを作成しようとしましたが、成功しませんでした。誰かアイデアはありますか?どうもありがとう

4

2 に答える 2

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']);
于 2012-12-06T11:56:10.300 に答える
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.'%"');  

}

于 2012-12-06T11:26:43.017 に答える