旧版主题筛选函数 要做新的了,把老的放出 - Assbbs
旧版主题筛选函数 要做新的了,把老的放出来晒晒…… 性能上没太大问题,但是数据结构是写死的,灵活性太差。 正在研究新函数,要换一种计算方式了。 function get b $b,$k,$v,$t,$a { $pdo=init ; $needn=$a+1;$needl=$a;$bq=count $b ; if !$v {$same…
旧版主题筛选函数 要做新的了,把老的放出来晒晒…… 性能上没太大问题,但是数据结构是写死的,灵活性太差。 正在研究新函数,要换一种计算方式了。 function get b $b,$k,$v,$t,$a { $pdo=init ; $needn=$a+1;$needl=$a;$bq=count $b ; if !$v {$samen=array ;$samel=array ;} else{ $sql=''; if $bq>1 {$sql.='SELECT FROM ';} $crc=$bq; foreach $b as $row { $crc--; $sql.=' SELECT c , d , t FROM b WHERE b ="'.$row.'" AND '.$k.' ='.$v.' '. $t?'AND t <='.$t:'' .' ORDER BY '.$k.' DESC, t DESC LIMIT '. $a+1 .' '; if $crc {$sql.=' UNION ALL ';} } if $bq>1 { $sql.=' AS tempn ORDER BY '.$k.' DESC, t DESC LIMIT '. $a+1 ; } $sql.=' ; '; if $t { if $bq>1 {$sql.='SELECT FROM ';} $crc=$bq; foreach $b as $row { $crc--;$sql.=' SELECT c , d , t FROM b WHERE b ="'.$row.'" AND '.$k.' ='.$v.' AND t >'.$t.' ORDER BY '.$k.' ASC, t ASC LIMIT '.$a.' '; if $crc {$sql.=' UNION ALL ';} } if $bq>1 {$sql.=' AS templ ORDER BY '.$k.' ASC, t ASC LIMIT '.$a;} } $sameq=$pdo->query $sql ; $samen=$sameq->fetchAll PDO::FETCH ASSOC ?:array ; if $t {$sameq->nextRowset ;$samel=$sameq->fetchAll PDO::FETCH ASSOC ?:array ;} else{$samel=array ;} } $needn-=count $samen ;$needl-=count $samel ; if !$needn && !$needl { $diffn=array ;$diffl=array ; } else{ $sql=''; if $needn { if $bq>1 {$sql.='SELECT FROM ';} $crc=$bq; foreach $b as $row { $crc--; $sql.=' SELECT c , d , t FROM b WHERE b ="'.$row.'" '. $v?'AND '.$k.' <'.$v:'' .' ORDER BY '.$k.' DESC, t DESC LIMIT '.$needn.' '; if $crc {$sql.=' UNION ALL ';} } if $bq>1 { $sql.=' AS tempn ORDER BY '.$k.' DESC, t DESC LIMIT '.$needn; } $sql.=' ; '; } if $needl && $v { if $bq>1 {$sql.='SELECT FROM ';} $crc=$bq; foreach $b as $row { $crc--;$sql.=' SELECT c , d , t FROM b WHERE b ="'.$row.'" AND '.$k.' >'.$v.' ORDER BY '.$k.' ASC, t ASC LIMIT '.$needl.' '; if $crc {$sql.=' UNION ALL ';} } if $bq>1 {$sql.=' AS tempn ORDER BY '.$k.' ASC, t ASC LIMIT '.$needl; } } $diffq=$pdo->query $sql ; $diffn=$needn? $diffq->fetchAll PDO::FETCH ASSOC ?:array :array ; if !$needl || !$v {$diffl=array ;} else{if $needn {$diffq->nextRowset ;}$diffl=$diffq->fetchAll PDO::FETCH ASSOC ?:array ;} } $needn-=count $diffn ;$needl-=count $diffl ; $res=array ; $res 't' =array merge $samen,$diffn ; $res 'b next' =$needn?null:array pop $res 't' ; $res 'b last' = $needl==$a ?null:end array merge $samel,$diffl ; $res 't' =array column $res 't' ,'t' ; return $res; }