今天在看代码的时候,看到一个排序,是一个函数封装到了类里面,咋看咋别扭,赶紧找个调用页面对应着看,才豁然开朗。
/*
* ALEX
* 参数说明:1.$tablename 表名
* 2.$fieldname 排序的字段名
* 3.$fieldvalue 需要排序的记录
* 4.$ordervalue 排序条件
* 5.$fieldsort 排序的字段
* 6.$oldsort 更改前的排序位置
* 7.$newsort 更改后的排序位置(即需要更新的设置)
*
*/
function gosort($tablename,$fieldname,$fieldvalue,$ordervalue,$fieldsort,$oldsort,$newsort){
if (strlen(trim($ordervalue))>0){
$ordervalue=" and " . $ordervalue;
}
if (intval($oldsort)>intval($newsort)){ //降序
$thisnewsort=$newsort-1;
$str_sql = "update " . $tablename . " set " . $fieldsort . "=" . $fieldsort . "+1 where " . $fieldsort . "<" . $oldsort . " and " . $fieldsort . ">" . $thisnewsort . $ordervalue;
mysql_query($str_sql);
}
if (intval($oldsort)<intval($newsort)){ //升序
$thisnewsort=$newsort+1;
$str_sql = "update " . $tablename . " set " . $fieldsort . "=" . $fieldsort . "-1 where " . $fieldsort . ">" . $oldsort . " and " . $fieldsort . "<" . $thisnewsort . $ordervalue;
mysql_query($str_sql);
}
$field=explode(",",$fieldsort); //将返回结果赋值给数组
$number=count($field);
for ($i=0;$i<$number;$i++){
$values=$values."$field[$i]='".$this->thisvalue["$field[$i]"]."',";
}
$values=substr($values,0,strlen($values)-1);
$source="update ".$tablename." set $values";
if (trim($fieldid . "=" . $idvalue . $ordervalue)<>""){
$source=$source." where ".$fieldid . "=" . $idvalue . $ordervalue;
}
mysql_query($source);
}
实现原理: 批量更新 更新前和需要更新的值的范围的内的数据库记录,然后再更新需要更新的值