Metoda w klasie...
  1. <?php
  2. function Move( $lft, $rgt, $parent_rgt ) 
  3. {
  4.         // Wybierz `pozycje` do przeniesienia
  5.         // Wieprzowina: lft = 5, rgt = 6
  6.         $this -> queryResults( &#092;"SELECT title FROM tree2 WHERE lft = '\".$lft.\"' AND rgt = '\".$rgt.\"'\" );
  7.         $row = $this -> fetchArray();
  8.         
  9.         // Wybierz nowego `rodzica` `pozycji` do przeniesienia
  10.         // Mieso: rgt = 11
  11.         $this -> queryResults( &#092;"SELECT title FROM tree2 WHERE rgt = '\".$parent_rgt.\"'\" );
  12.         $row_parent = $this -> fetchArray();
  13.         
  14.         // Wybierz najwiekszy `rgt`, gdzie
  15.         $this -> queryResults( &#092;"SELECT MAX(rgt) AS rgt FROM tree2 WHERE parent = '\".$row_parent['title'].\"'\" );
  16.         $row_max = $this -> fetchArray();
  17.         
  18.         $this -> queryResults( &#092;"UPDATE tree2 SET rgt = (rgt + 2) WHERE rgt >= ($row_max[rgt] + 1)\" );
  19.  
  20.         // Dodaje nowa `pozycje` w ustalone pod ustalone miejsce
  21.         $this -> queryResults( &#092;"INSERT INTO tree2 SET parent = '\".$row_parent['title'].\"', 
  22. title = '\".$row['title'].\"', lft = (&#092;".$row_max['rgt'].\" + 1), rgt = (\".$row_max['rgt'].\" + 2)\" );
  23.  
  24.         // Usuwa `pozycje` ze starego miejsca
  25.         $this -> queryResults( &#092;"DELETE FROM tree2 WHERE lft = '\".$lft.\"' AND rgt = '\".$rgt.\"'\" );
  26.  
  27.         $this -> queryResults( &#092;"UPDATE tree2 SET rgt = (rgt - 2) WHERE rgt > '\".$rgt.\"'\" );        
  28.         $this -> queryResults( &#092;"UPDATE tree2 SET lft = (lft - 2) WHERE lft > '\".$lft.\"'\" );        
  29. ?>
Stosuje tak:
  1. <?php
  2. $moveTree = new Trees;
  3. $moveTree -> Move( lft_pozycji_do_przesuniecia, rgt_pozycji_do_przesuniecia, parent_rgt_nowa_kategoria(rodzic)_pozycji );
  4. ?>
Wszystkie jest dobrze jak podam np. 5, 6, 11, ale jesli chce podac 7, 8, 5 (przesuniecie jakby w druga strone) to sie sypie.
Problem chyba tkwi w kolejnosci zapytan SQL. Nie wiem dlaczego w przypadku gdy ostatni argument jest mniejszy od pozostalych to sie sypie...

Mam nadzieje ze mnie zrozumieliscie. Jak cos to pytac! Siedze nad tym juz dobre pare godzin...