我将计划时间范围存储为下午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 |
| .... |
如何确保如果选择晚上8点到晚上9点(0800-0900),它将不会显示0845-0945,0810-0910等...