Advertisement
Guest User

Shock

a guest
Aug 21st, 2009
712
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.70 KB | None | 0 0
  1.  
  2. function generateData ($size, $depth, $parent) {
  3.     $result = array();
  4.     for ($i = 0; $i < $size; $i++) {
  5.         $elem = new Elem;
  6.         $elem->setData ($parent ? $parent->getData() . '.' . ($i+1) : '#'.($i+1));
  7.         $elem->setChildren ($depth ? generateData($size, $depth-1, $elem) : array());
  8.         $elem->setParent ($parent);
  9.         $result[] = $elem;
  10.     }
  11.     return $result;
  12. }
  13.  
  14. function insertTreeFHRecursive ($tree) {
  15.     $qElem = "INSERT INTO `Elements` (`ID`, `Data`) VALUES (NULL, '%s')";
  16.     $qHier = "INSERT INTO `ElementsHierarchy`(`ElemID`,`ParentID`,`Level`) VALUES (%s)";
  17.     $qParents = "SELECT * FROM `ElementsHierarchy` WHERE `ElemID` = '%d'";
  18.     foreach ($tree as $elem) {
  19.         $query   = sprintf($qElem, Db::escape($elem->getData()));
  20.         $elem->setId(Db::execute($query));
  21.         $parents = array();
  22.         if ($elem->getParent()) {
  23.             $parentId = $elem->getParent()->getId();
  24.             $parentParents = Db::select(sprintf($qParents, $parentId));
  25.             foreach ($parentParents as $k => $v) {
  26.                 $parents[] = join (',', array ($elem->getId(), $v['ParentID'] ? $v['ParentID'] : 'NULL', $v['Level']+1));
  27.             }
  28.             $parents[] = join (',', array ($elem->getId(), $parentId, 1));
  29.             $parentsString = join ('), (', $parents);
  30.         } else {
  31.             $parentsString = join (',', array($elem->getId(), 'NULL', 1));
  32.         }
  33.         Db::execute(sprintf($qHier, $parentsString));
  34.         if ($elem->getChildren()) {
  35.             insertTreeRecursive($elem->getChildren());
  36.         }
  37.     }
  38. }
  39.  
  40. function insertTreeMPRecursive ($tree) {
  41.     $qElem = "INSERT INTO `ElementsMP` (`ID`, `Data`, `Path`) VALUES (NULL, '%s', %s)";
  42.     $qParent = "SELECT `Path` FROM `ElementsMP` WHERE `ID` = '%d'";
  43.     foreach ($tree as $elem) {
  44.         if ($elem->getParent()) {
  45.             $parentID = $elem->getParent()->getId();
  46.             $parent = Db::select(sprintf($qParent, $parentID));
  47.             if ($parent[0]['Path']) {
  48.                 $path = $parent[0]['Path'] . $parentID . '.';
  49.             } else {
  50.                 $path = '.' . $parentID . '.';
  51.             }
  52.             $query = sprintf($qElem, $elem->getData(), "'$path'");
  53.             $elem->setId(Db::execute($query));
  54.         } else {
  55.             $query = sprintf($qElem, $elem->getData(), 'NULL');
  56.             $elem->setId(Db::execute($query));
  57.         }
  58.         if ($elem->getChildren()) {
  59.             insertTreeMPRecursive($elem->getChildren());
  60.         }
  61.     }
  62. }
  63.  
  64.  
  65. function getTreeByParent_MP ($id) {
  66.     $id = (int) $id;
  67.     Db::select("SELECT SQL_NO_CACHE * FROM `ElementsMP` WHERE `Path` LIKE '%.$id.%'");
  68. }
  69.  
  70. function getTreeByParent_FH ($id) {
  71.     $id = (int) $id;
  72.     Db::select("
  73. SELECT SQL_NO_CACHE `Elements`.*, `Parent`.`ParentID` FROM `Elements`
  74. INNER JOIN `ElementsHierarchy` as `Hier`
  75.     ON `Hier`.`ElemID` = `Elements`.`ID`
  76. INNER JOIN `ElementsHierarchy` as `Parent`
  77.     ON (`Parent`.`ElemID` = `Elements`.`ID` AND `Parent`.`Level` = 1)
  78. WHERE `Hier`.`ParentID` = $id OR `Elements`.`Id` = $id
  79.     ");
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement