修复ANY_VALUE兼容

This commit is contained in:
cloud 2020-12-06 23:35:37 +08:00
parent 00521062e4
commit c33612f600
1 changed files with 69 additions and 16 deletions

View File

@ -20,7 +20,33 @@ trait tdata {
private $skip_field = []; private $skip_field = [];
// 场所统计查询内的公用where // 场所统计查询内的公用where
private $villages_where = ''; private $villages_where = '';
// 根据社区类型和地图选择判断小区的ID
private $village_whereid = '';
// 计算社区类型地图选择返回被选中的小区ID
private function fun_sqlk_vid(){
global $_M, $_YW;
$idArr = $vidArr = [];
if (is_array($this->form['vtype'])) {
$vtype = arrayto_string($this->form['vtype'],',');
$vid = $this->tsql->table('village')->qfield('id')->where("v_type IN({$vtype})")->all();
$idArr = array_column($vid,'id');
if(count($idArr) == 0) $idArr = [-1];
}
if($this->form['v_id']){
$vidArr = stringto_array($this->form['v_id'],',');
// 取社区类型和地图筛选的交集重叠ID社区类型没有操作则直接按照地图筛选结果
// $idArr = count($idArr) > 0?array_intersect($vidArr,$idArr):$vidArr;
if(count($idArr) > 0){
$idArr = array_intersect($vidArr,$idArr);
// 如果交集为空则确实通过此条件进行了筛选就要通知SQL没有任何值满足当前条件将ID设置为0肯定查找不到
if(count($idArr) == 0) $idArr = [-1];
}else{
$idArr = $vidArr;
}
}
return $idArr;
}
//表名 //表名
public function td_sqlk() { public function td_sqlk() {
global $_M, $_YW; global $_M, $_YW;
@ -29,16 +55,36 @@ trait tdata {
switch ($this->tname) { switch ($this->tname) {
case 'applan': case 'applan':
//判断是否可选的依据 //判断是否可选的依据
if (!empty($this->form['slid'])) if (!empty($this->form['slid'])) $where = " AND nla.id != '{$this->form['slid']}' ";
$where = " AND nla.id != '{$this->form['slid']}' ";
$ason = '';
// 计算是否区分广告位,不考虑导出
if (is_array($this->form['e_aps'])) {
$veaps = parent::strchange(array_filter($this->form['e_aps']));
$this->villages_where = " nel.e_aps IN({$veaps}) ";
$ason .= " {$this->villages_where} AND ";
}
// 根据小区单个ID
if($this->form['e_vid']){
$ason .= " nel.e_vid = '{$this->form['e_vid']}' AND ";
}
// 社区类型 不考虑导出
$idArr = self::fun_sqlk_vid();
// 通过ID筛选掉不需要的
if(count($idArr) > 0){
$this->village_whereid = arrayto_string(array_unique($idArr),',');
$ason .= " nel.e_vid IN({$this->village_whereid}) AND ";
}
//表 //表
$sqlk = " {$_YW['k']['elevator']} AS el " $sqlk = " {$_YW['k']['elevator']} AS el "
. "LEFT JOIN (SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nowe_number,ANY_VALUE( nla.id ) AS nowid,ANY_VALUE( nla.l_title ) AS nowtitle,ANY_VALUE( nla.l_starttime ) AS nowstime,ANY_VALUE( nla.l_endtime ) AS nowetime,if(NOT ( nla.l_endtime < '{$curdate}' OR nla.l_starttime > '{$curdate}' ) OR nla.l_starttime > '{$curdate}',1,0) AS estate FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE NOT ( nla.l_endtime < '{$curdate}' OR nla.l_starttime > '{$curdate}' ) AND nla.id IS NOT NULL ORDER BY nowstime ASC ) eala GROUP BY nowe_number ) ala ON ala.nowe_number = el.e_number " . "LEFT JOIN (SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nowe_number,ANY_VALUE( nla.id ) AS nowid,ANY_VALUE( nla.l_title ) AS nowtitle,ANY_VALUE( nla.l_starttime ) AS nowstime,ANY_VALUE( nla.l_endtime ) AS nowetime,if(NOT ( nla.l_endtime < '{$curdate}' OR nla.l_starttime > '{$curdate}' ) OR nla.l_starttime > '{$curdate}',1,0) AS estate FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE {$ason} NOT ( nla.l_endtime < '{$curdate}' OR nla.l_starttime > '{$curdate}' ) AND nla.id IS NOT NULL ORDER BY nowstime ASC ) eala GROUP BY nowe_number ) ala ON ala.nowe_number = el.e_number "
. "LEFT JOIN (SELECT nel.e_number AS ende_number, max( nla.l_endtime ) AS endtime FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE nla.id IS NOT NULL GROUP BY ende_number) cla ON cla.ende_number = el.e_number " . "LEFT JOIN (SELECT nel.e_number AS ende_number, max( nla.l_endtime ) AS endtime FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE {$ason} nla.id IS NOT NULL GROUP BY ende_number) cla ON cla.ende_number = el.e_number "
. "LEFT JOIN ( SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nexte_number,ANY_VALUE( nla.id ) AS nextid,ANY_VALUE( nla.l_title ) AS nexttitle,ANY_VALUE( nla.l_starttime ) AS nextstime,ANY_VALUE( nla.l_endtime ) AS nextetime FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE nla.l_starttime > '{$curdate}' AND nla.id IS NOT NULL ORDER BY nextstime ASC ) eala GROUP BY nexte_number ) bla ON bla.nexte_number = el.e_number " . "LEFT JOIN ( SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nexte_number,ANY_VALUE( nla.id ) AS nextid,ANY_VALUE( nla.l_title ) AS nexttitle,ANY_VALUE( nla.l_starttime ) AS nextstime,ANY_VALUE( nla.l_endtime ) AS nextetime FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE {$ason} nla.l_starttime > '{$curdate}' AND nla.id IS NOT NULL ORDER BY nextstime ASC ) eala GROUP BY nexte_number ) bla ON bla.nexte_number = el.e_number "
. "LEFT JOIN (SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nend_number,ANY_VALUE( nla.id ) AS endid,ANY_VALUE( nla.l_title ) AS endtitle,ANY_VALUE( nla.l_starttime ) AS endstime,ANY_VALUE( nla.l_endtime ) AS endetime FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE nla.l_endtime < '{$curdate}' AND nla.id IS NOT NULL ORDER BY endetime DESC ) eala GROUP BY nend_number ) dla ON dla.nend_number = el.e_number " . "LEFT JOIN (SELECT * FROM( SELECT DISTINCT( nel.e_number ) AS nend_number,ANY_VALUE( nla.id ) AS endid,ANY_VALUE( nla.l_title ) AS endtitle,ANY_VALUE( nla.l_starttime ) AS endstime,ANY_VALUE( nla.l_endtime ) AS endetime FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE {$ason} nla.l_endtime < '{$curdate}' AND nla.id IS NOT NULL ORDER BY endetime DESC ) eala GROUP BY nend_number ) dla ON dla.nend_number = el.e_number "
. "LEFT JOIN (SELECT nel.e_number AS lde_number,count(nel.e_number) AS lanum FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE NOT ( nla.l_endtime < '{$this->form['l_starttime']}' OR nla.l_starttime > '{$this->form['l_endtime']}' ) {$where} GROUP BY lde_number) AS ela ON ela.lde_number = el.e_number "; . "LEFT JOIN (SELECT nel.e_number AS lde_number,count(nel.e_number) AS lanum FROM {$_YW['k']['elevator']} AS nel LEFT JOIN {$_YW['k']['launch']} AS nla ON find_in_set( nel.e_number, nla.l_enumber ) WHERE {$ason} NOT ( nla.l_endtime < '{$this->form['l_starttime']}' OR nla.l_starttime > '{$this->form['l_endtime']}' ) {$where} GROUP BY lde_number) AS ela ON ela.lde_number = el.e_number ";
break; break;
case 'elevators': case 'elevators':
$sqlk = " {$_YW['k']['elevator']} AS el LEFT JOIN {$_YW['k']['launch']} AS la ON find_in_set( el.e_number, la.l_enumber ) " $sqlk = " {$_YW['k']['elevator']} AS el LEFT JOIN {$_YW['k']['launch']} AS la ON find_in_set( el.e_number, la.l_enumber ) "
@ -70,13 +116,22 @@ trait tdata {
// 计算是否区分广告位 // 计算是否区分广告位
// 检测是否通过JS传递的广告位参数也就是导出 // 检测是否通过JS传递的广告位参数也就是导出
if (isset($this->form['jsadd_veaps'])) if (isset($this->form['jsadd_veaps'])) $this->form['veaps'] = stringto_array($this->form['jsadd_veaps'], ',');
$this->form['veaps'] = stringto_array($this->form['jsadd_veaps'], ',');
if (is_array($this->form['veaps'])) { if (is_array($this->form['veaps'])) {
$veaps = parent::strchange(array_filter($this->form['veaps'])); $veaps = parent::strchange(array_filter($this->form['veaps']));
$this->villages_where = " el.e_aps IN($veaps) "; $this->villages_where = " el.e_aps IN({$veaps}) ";
$son .= " {$this->villages_where} AND "; $son .= " {$this->villages_where} AND ";
} }
// 社区类型
// 先查询出需要的ID
if (isset($this->form['jsadd_vtype'])) $this->form['vtype'] = stringto_array($this->form['jsadd_vtype'], ',');
$idArr = self::fun_sqlk_vid();
// 通过ID筛选掉不需要的
if(count($idArr) > 0){
$this->village_whereid = arrayto_string(array_unique($idArr),',');
$son .= " el.e_vid IN({$this->village_whereid}) AND ";
}
// 空置计算要排除当前排期中的广告位 // 空置计算要排除当前排期中的广告位
if ($bool) { if ($bool) {
@ -134,9 +189,6 @@ trait tdata {
public function td_field() { public function td_field() {
global $_M, $_YW; global $_M, $_YW;
switch ($this->tname) { switch ($this->tname) {
case 'applan':
$field = '*';
break;
case 'elevators': case 'elevators':
$field = ' el.*,max( la.l_endtime ) AS endtime,count( DISTINCT la.id ) AS e_totalnum,ala.*,if(ala.estate,1,0) AS etypes,bla.*,cla.* '; $field = ' el.*,max( la.l_endtime ) AS endtime,count( DISTINCT la.id ) AS e_totalnum,ala.*,if(ala.estate,1,0) AS etypes,bla.*,cla.* ';
break; break;
@ -303,6 +355,7 @@ trait tdata {
$veaps = parent::strchange(array_filter($this->form['e_aps'])); $veaps = parent::strchange(array_filter($this->form['e_aps']));
$where .= " AND e_aps IN($veaps) "; $where .= " AND e_aps IN($veaps) ";
} }
if (strlen($this->village_whereid) > 0) $where .= " AND el.e_vid IN({$this->village_whereid}) ";
break; break;
case 'elevators': case 'elevators':
$this->search_input = ['e_number']; $this->search_input = ['e_number'];
@ -385,8 +438,8 @@ trait tdata {
$this->form['v_city'] = $this->form['v_address']; $this->form['v_city'] = $this->form['v_address'];
$this->form['v_district'] = $this->form['v_address']; $this->form['v_district'] = $this->form['v_address'];
if (is_array($this->form['veaps'])) if (strlen($this->villages_where) > 0) $where .= " AND {$this->villages_where} ";
$where .= " AND {$this->villages_where} "; if (strlen($this->village_whereid) > 0) $where .= " AND vi.id IN({$this->village_whereid}) ";
$where .= self::td_search_or($this->search_link); $where .= self::td_search_or($this->search_link);
$where .= self::td_search(); $where .= self::td_search();
//判断是否为备份 //判断是否为备份