php建構函式,引入資料庫操作類函數

來源:互聯網
上載者:User

標籤:name   echo   query   ack   方便   dshow   elf   char   不包含   

<?php 
/** 
    * 基於左右值排序的無限分類演算法 
    * 資料庫結果為 
CREATE TABLE om_catagory ( 
     CatagoryID int(10) unsigned NOT NULL auto_increment, 
    Name varchar(50) default ‘‘, 
     Lft int(10) unsigned NOT NULL default ‘0‘, 
     Rgt int(10) unsigned NOT NULL default ‘0‘, 
     PRIMARY KEY (id), 
     KEY lft (lft), 
     KEY rgt (rgt) 

    * 更多的關於左右值排序的例子 
    * http://www.chinaunix.net/jh/27/239532.html(http://dev.mysql.com/tech-resources/articles/hierarchical-data.html) 
    * @author [email][email protected][/email] 
    * @version         1.0 
    * @copyright psdshow 
    * 歡迎光臨我的個人日誌 http://www.dayanmei.com 
    */ 
class sortclass 
{


/** 
    * Description 
    * @var          
    * @since         1.0 
    * @access     private 
    */ 
var $db;


/** 
    * Description 
    * @var          
    * @since         1.0 
    * @access     private 
    */ 
var $tablefix;


/** 
    * Short description. 
    * 建構函式,引入資料庫操作類函數 
    * Detail description 
    * @param         none 
    * @global         none 
    * @since         1.0 
    * @access         private 
    * @return         void 
    * @update         date time 
*/ 
function sortclass() 

global $db; 
$this->db=$db; 
$this->tablefix="om_"; 
} // end func


/** 
    * Short description. 
    * 增加新的分類 
    * Detail description 
    * @param         none 
    * @global         none 
    * @since         1.0 
    * @access         private 
    * @return         void 
    * @update         date time 
*/ 
function addsort($CatagoryID,$SortName) 

if($CatagoryID==0){ 
    $Lft=0; 
    $Rgt=1; 
    }else{ 
    $Result=$this->checkcatagory($CatagoryID); 
    //取得父類的左值,右值 
    $Lft=$Result[‘Lft‘]; 
    $Rgt=$Result[‘Rgt‘]; 
    $this->db->query("UPDATE `".$this->tablefix."catagory` SET `Lft`=`Lft`+2 WHERE `Lft`>$Rgt"); 
    $this->db->query("UPDATE `".$this->tablefix."catagory` SET `Rgt`=`Rgt`+2 WHERE `Rgt`>=$Rgt"); 
    }


//插入 
if($this->db->query("INSERT INTO `".$this->tablefix."catagory` SET `Lft`=‘$Rgt‘,`Rgt`=‘$Rgt‘+1,`Name`=‘$SortName‘")){ 
    //$this->referto("成功增加新的類別","JAVASCRIPT:HISTORY.BACK(1)",3); 
    return 1; 
    }else{ 
    //$this->referto("增加新的類別失敗了","JAVASCRIPT:HISTORY.BACK(1)",3); 
    return -1; 
    } 
} // end func

 

/** 
    * Short description. 
    * 刪除類別 
    * Detail description 
    * @param         none 
    * @global         none 
    * @since         1.0 
    * @access         private 
    * @return         void 
    * @update         date time 
*/ 
function deletesort($CatagoryID) 

//取得被刪除類別的左右值,檢測是否有子類,如果有就一起刪除 
$Result=$this->checkcatagory($CatagoryID); 
$Lft=$Result[‘Lft‘]; 
$Rgt=$Result[‘Rgt‘]; 
//執行刪除 
if($this->db->query("DELETE FROM `".$this->tablefix."catagory` WHERE `Lft`>=$Lft AND `Rgt`<=$Rgt")){ 
    $Value=$Rgt-$Lft+1; 
    //更新左右值 
    $this->db->query("UPDATE `".$this->tablefix."catagory` SET `Lft`=`Lft`-$Value WHERE `Lft`>$Lft"); 
    $this->db->query("UPDATE `".$this->tablefix."catagory` SET `Rgt`=`Rgt`-$Value WHERE `Rgt`>$Rgt"); 
    //$this->referto("成功刪除類別","javascript:history.back(1)",3); 
    return 1; 
    }else{ 
    //$this->referto("刪除類別失敗了","javascript:history.back(1)",3); 
    return -1; 
    } 
} // end func


    


/** 
    * Short description. 
    * 1,所有子類,不包含自己;2包含自己的所有子類;3不包含自己所有父類4;包含自己所有父類 
    * Detail description 
    * @param         none 
    * @global         none 
    * @since         1.0 
    * @access         private 
    * @return         void 
    * @update         date time 
*/ 
function getcatagory($CatagoryID,$type=1) 

$Result=$this->checkcatagory($CatagoryID); 
$Lft=$Result[‘Lft‘]; 
$Rgt=$Result[‘Rgt‘]; 
$SeekSQL="SELECT * FROM `".$this->tablefix."catagory` WHERE "; 
switch ($type) { 
     case "1": 
    $condition="`Lft`>$Lft AND `Rgt`<$Rgt"; 
    break; 
    case "2": 
    $condition="`Lft`>=$Lft AND `Rgt`<=$Rgt"; 
    break; 
     case "3": 
         $condition="`Lft`<$Lft AND `Rgt`>$Rgt"; 
         break; 
    case "4": 
    $condition="`Lft`<=$Lft AND `Rgt`>=$Rgt"; 
    break; 
    default : 
    $condition="`Lft`>$Lft AND `Rgt`<$Rgt"; 
    ; 
    } 
$SeekSQL.=$condition." ORDER BY `Lft` ASC"; 
$Sorts=$this->db->getrows($SeekSQL); 
return $Sorts; 
} // end func

 

/** 
    * Short description. 
    * 取得直屬父類 
    * Detail description 
    * @param         none 
    * @global         none 
    * @since         1.0 
    * @access         private 
    * @return         void 
    * @update         date time 
*/ 
function getparent($CatagoryID) 

$Parent=$this->getcatagory($CatagoryID,3); 
return $Parent; 
} // end func 
/** 
    * Short description. 
    * 移動類,如果類有子類也一併移動 
    * Detail description 
    * @param         none 
    * @global         none 
    * @since         1.0 
    * @access         private 
    * @return         void 
    * @update         date time 
*/ 
function movecatagory($SelfCatagoryID,$ParentCatagoryID) 

$SelfCatagory=$this->checkcatagory($SelfCatagoryID); 
$NewCatagory=$this->checkcatagory($ParentCatagoryID);


$SelfLft=$SelfCatagory[‘Lft‘]; 
$SelfRgt=$SelfCatagory[‘Rgt‘]; 
$Value=$SelfRgt-$SelfLft; 
//取得所有分類的ID方便更新左右值 
$CatagoryIDS=$this->getcatagory($SelfCatagoryID,2); 
foreach($CatagoryIDS as $v){ 
    $IDS[]=$v[‘CatagoryID‘]; 
    } 
$InIDS=implode(",",$IDS);


$ParentLft=$NewCatagory[‘Lft‘]; 
$ParentRgt=$NewCatagory[‘Rgt‘]; 
//print_r($InIDS); 
//print_r($NewCatagory); 
//print_r($SelfCatagory); 
//exit; 
if($ParentRgt>$SelfRgt){ 
    $UpdateLeftSQL="UPDATE `".$this->tablefix."catagory` SET `Lft`=`Lft`-$Value-1 WHERE `Lft`>$SelfRgt AND `Rgt`<=$ParentRgt"; 
    $UpdateRightSQL="UPDATE `".$this->tablefix."catagory` SET `Rgt`=`Rgt`-$Value-1 WHERE `Rgt`>$SelfRgt AND `Rgt`<$ParentRgt"; 
    $TmpValue=$ParentRgt-$SelfRgt-1; 
    $UpdateSelfSQL="UPDATE `".$this->tablefix."catagory` SET `Lft`=`Lft`+$TmpValue,`Rgt`=`Rgt`+$TmpValue WHERE `CatagoryID` IN($InIDS)"; 
    }else{ 
    $UpdateLeftSQL="UPDATE `".$this->tablefix."catagory` SET `Lft`=`Lft`+$Value+1 WHERE `Lft`>$ParentRgt AND `Lft`<$SelfLft"; 
    $UpdateRightSQL="UPDATE `".$this->tablefix."catagory` SET `Rgt`=`Rgt`+$Value+1 WHERE `Rgt`>=$ParentRgt AND `Rgt`<$SelfLft"; 
    $TmpValue=$SelfLft-$ParentRgt; 
    $UpdateSelfSQL="UPDATE `".$this->tablefix."catagory` SET `Lft`=`Lft`-$TmpValue,`Rgt`=`Rgt`-$TmpValue WHERE `CatagoryID` IN($InIDS)"; 
    } 
$this->db->query($UpdateLeftSQL); 
$this->db->query($UpdateRightSQL); 
$this->db->query($UpdateSelfSQL); 
//$this->referto("成功移動類別","javascript:history.back(1)",3); 
return 1; 
} // end func


/** 
    * Short description. 
    * 
    * Detail description 
    * @param         none 
    * @global         none 
    * @since         1.0 
    * @access         private 
    * @return         void 
    * @update         date time 
*/ 
function checkcatagory($CatagoryID) 

//檢測父類ID是否存在 
$SQL="SELECT * FROM `".$this->tablefix."catagory` WHERE `CatagoryID`=‘$CatagoryID‘ LIMIT 1"; 
$Result=$this->db->getrow($SQL); 
if(count($Result)<1){ 
    $this->referto("父類ID不存在,請檢查","javascript:history.back(1)",3); 
    } 
return $Result;      
} // end func


/** 
    * Short description. 
    * 
    * Detail description 
    * @param         none 
    * @global         none 
    * @since         1.0 
    * @access         private 
    * @return         array($Catagoryarray,$Deep) 
    * @update         date time 
*/ 
function sort2array($CatagoryID=0) 

     $Output = array(); 
     if($CatagoryID==0){ 
    $CatagoryID=$this->getrootid(); 
    } 
     if(empty($CatagoryID)){ 
    return array(); 
    exit; 
    } 
     $Result = $this->db->query(‘SELECT Lft, Rgt FROM `‘.$this->tablefix. 
                                 ‘catagory` WHERE `CatagoryID`=‘.$CatagoryID); 
     if($Row = $this->db->fetch_array($Result)) { 
     $Right = array(); 
     $Query = ‘SELECT * FROM `‘.$this->tablefix. 
                 ‘catagory` WHERE Lft BETWEEN ‘.$Row[‘Lft‘].‘ AND ‘. 
                 $Row[‘Rgt‘].‘ ORDER BY Lft ASC‘; 
      
     $Result = $this->db->query($Query); 
     while ($Row = $this->db->fetch_array($Result)) { 
         if (count($Right)>0) { 
    while ($Right[count($Right)-1]<$Row[‘Rgt‘]) { 
    array_pop($Right); 
    } 
         } 
    $Output[]=array(‘Sort‘=>$Row,‘Deep‘=>count($Right)); 
     $Right[] = $Row[‘Rgt‘]; 
     } 
     } 
     return $Output;      
} // end func

 

/** 
    * Short description. 
    * 
    * Detail description 
    * @param         none 
    * @global         none 
    * @since         1.0 
    * @access         private 
    * @return         void 
    * @update         date time 
*/ 
function getrootid() 

$Query="SELECT * FROM`".$this->tablefix."catagory` ORDER BY `Lft` ASC LIMIT 1"; 
$RootID=$this->db->getrow($Query); 
if(count($RootID)>0){ 
    return $RootID[‘CatagoryID‘]; 
    }else{ 
    return 0; 
    } 
} // end func


/** 
    * Short description. 
    * 
    * Detail description 
    * @param         none 
    * @global         none 
    * @since         1.0 
    * @access         private 
    * @return         void 
    * @update         date time 
*/ 
function referto($msg,$url,$sec) 

    echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\">"; 
    echo "<meta http-equiv=refresh content=$sec;URL=$url>"; 
         if(is_array($msg)){2881064151 
    foreach($msg as $key=>$value){ 
    echo $key."=>".$value."<br>"; 
             } 
             }else{ 
             echo $msg; 
             } 
     exit; 
} // end func 
} // end class


?>

 

函數描述及例子

 

PHP無限分類[左右值]演算法

php建構函式,引入資料庫操作類函數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.