0

朝、昼、夜の各チームがプレーするスポーツ(バドミントン)の検索ページを作っています。1 週間に 3 回プレイできます。したがって、テーブルは次のようになります。

start_time = "08:00:00"
start_time2 = "12:00:00"
start_time 3 = "18:00:00"

または、チームが週に 1 回しかプレーしない場合、テーブルは次のようになります。

start_time = "08:00:00"
start_time2 = "00:00:00"
start_time3 = "00:00:00"

現在、私のクエリは次のようになっています。

if (isset($_REQUEST['time'])){
foreach ($time as $value){ //make day stay checked 2012/12/31
    if ($value == "早上") $morning = "checked";
    if ($value == "下午") $afternoon = "checked";
    if ($value == "晚上") $evening = "checked";   
}
if ($morning == "checked" and $afternoon != "checked" and $evening != "checked"){ //only morning
    $criteria .= "and (start_time < '12:00:00' or start_time2 < '12:00:00' or start_time3 < '12:00:00')";
}elseif ($morning == "checked" and $afternoon == "checked" and $evening != "checked"){ //morning + afternoon
    $criteria .= "and (start_time < '18:00:00' or start_time2 < '18:00:00' or start_time3 < '18:00:00')";
}elseif ($morning == "checked" and $afternoon != "checked" and $evening == "checked"){ //morning + evening
    $criteria .= "and ((start_time < '12:00:00' and start_time >= '18:00:00') or (start_tim2e < '12:00:00' and start_time2 >= '18:00:00') or (start_time3 < '12:00:00' and start_time3 >= '18:00:00'))";
}elseif ($morning != "checked" and $afternoon == "checked" and $evening != "checked"){ //afternoon
    $criteria .= "and ((start_time >= '12:00:00' and start_time < '18:00:00') or (start_time2 >= '12:00:00' and start_time2 < '18:00:00') or (start_time3 >= '12:00:00' and start_time3 < '18:00:00'))";
}elseif ($morning != "checked" and $afternoon == "checked" and $evening == "checked"){ //afternoon + evening
    $criteria .= "and (start_time >= '12:00:00' or start_time2 >= '12:00:00' or start_time3 >= '12:00:00')"; 
}elseif ($morning != "checked" and $afternoon != "checked" and $evening == "checked"){ //only evening
    $criteria .= "and (start_time >= '18:00:00' or start_time2 >= '18:00:00' or start_time3 >= '18:00:00')";
}

2 つの問題があります。

  1. より速く実行するために、より少ないコードを記述するより良い方法はありますか?
  2. start_time が 00:00:00 であるかどうかを確認しないようにするにはどうすればよいですか? チェックをスキップしないと、朝だけ検索したい場合に条件が true になるからです。朝は 12:00:00 未満の時刻であり、00:00:00 は 12:00:00 未満であるためです。
4

1 に答える 1

0

なぜあなたは通り過ぎるのif ($value == "早上") $morning = "checked";ですか?値を使用してクエリを変更するだけです。

 if ($value == "早上"){
        $criteria .= "and (start_time < '12:00:00' or start_time2 < '12:00:00' or start_time3 < '12:00:00')";
    }
  elseif ($value == "下午"){
       $criteria .= "and (start_time < '18:00:00' or start_time2 < '18:00:00' or start_time3 < '18:00:00')";  
    }
    elseif ($value == "value3"){
       $criteria .= "query3";  
    }

必要に応じて、「if」を「switch」ケースに置き換えることができます

switch ($value) {
    case 0:
        $criteria .= "query1" 
        break;
    case 1:
         $criteria .= "query2" 
        break;
    case 2:
         $criteria .= "query3" 
        break;
}
于 2013-01-06T17:21:49.347 に答える