如何将这些值与PHP / SQL进行比较?

时间:2017-05-28 08:21:28

标签: php mysql sql mysqli

我将计划时间范围存储为下午3:30至下午4:30 =>每个例子1530-1630。 我需要按时间范围过滤可用性,例如,如果用户选择晚上8点到晚上9点(0800-0900),则不会显示此范围之间的任何值。 这必须仅使用SQL来完成,因为我同时使用其他过滤器来显示结果。

到目前为止,这是我的代码:

    $getfilters = 'staff,availability_time';
    $getvalues = 'Backup,0800-0900';
    $values = explode(',', $getvalues);
    $filters = explode(',', $getfilters);

    $i = 0;
    $endquery = '';
    $nbrfilters = count($filters);
    $arrayf = array();

    foreach($filters as $filter){
        $arrayf[$filter][] = $values[$i];
        $i++;
    }

    $filterscnt = count($arrayf);

    $t = 0;
    foreach($arrayf as $type => $value){
        $valuescnt = count($arrayf[$type]);
        $v = 1;

        if($t<$filterscnt){
            $endquery .= " AND ";
        }
        foreach($value as $val){

            if($type == 'staff'){
                $sqlname = 'c.position_staff';
            }else if($type == 'jobs'){
                $sqlname = 'c.position_job';
            }else if($type == 'gender'){
                $sqlname = 'c.gender';
            }else if($type == 'availability_days'){
                $sqlname = 's.days';
            }else if($type == 'availability_time'){
                $sqlname = 's.times';
            }

            if($type != 'availability_days'){
                if($valuescnt==1){
                    $endquery .= $sqlname."='".$val."'";
                }else if($valuescnt>1){
                    if($v==1){
                        $endquery .= "(".$sqlname."='".$val."'";
                    }else if($v<$valuescnt){
                        $endquery .= " OR ".$sqlname."='".$val."'";
                    }else if($v==$valuescnt){
                        $endquery .= " OR ".$sqlname."='".$val."')";
                    }
                }
            }else{
                if($valuescnt==1){
                    $endquery .= $sqlname." not like '%".$val."%'";
                }else if($valuescnt>1){
                    if($v==1){
                        $endquery .= "(".$sqlname." not like '%".$val."%'";
                    }else if($v<$valuescnt){
                        $endquery .= " AND ".$sqlname." not like '%".$val."%'";
                    }else if($v==$valuescnt){
                        $endquery .= " AND ".$sqlname." not like '%".$val."%')";
                    }
                }
            }

            $v++;
        }
        $t++;
    }

    $sql  =   "SELECT c.*
               FROM cleaners AS c
               LEFT JOIN missions AS m ON c.id=m.cleanerid
               LEFT JOIN schedules AS s ON c.id=s.cleanerid
               WHERE s.status=1".$endquery."
               GROUP BY c.id
               ORDER BY c.id ASC";

过滤时间的列如下:

|    times    |
_______________
|  1335-1435  |
|  0945-1045  |
|    ....     |

SQL FIDDLE

如何确保如果选择晚上8点到晚上9点(0800-0900),它将不会显示0845-0945,0810-0910等...

0 个答案:

没有答案