Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Przenieś węzeł w drzewie zestawów zagnieżdżonych

Oto rozwiązanie, które pozwala przenieść węzeł do dowolnej pozycji w drzewie za pomocą tylko jednego parametru wejściowego - nowej lewej pozycji (newpos) węzła.

Zasadniczo istnieją trzy zestawy:

  • Utwórz nową przestrzeń dla poddrzewa.
  • Przenieś poddrzewo w to miejsce.
  • Usuń starą przestrzeń zwolnioną przez poddrzewo.

W pseudo-sql wygląda to tak:

//
 *  -- create new space for subtree
 *  UPDATE tags SET lpos = lpos + :width WHERE lpos >= :newpos
 *  UPDATE tags SET rpos = rpos + :width WHERE rpos >= :newpos
 * 
 *  -- move subtree into new space
 *  UPDATE tags SET lpos = lpos + :distance, rpos = rpos + :distance
 *           WHERE lpos >= :tmppos AND rpos < :tmppos + :width
 * 
 *  -- remove old space vacated by subtree
 *  UPDATE tags SET lpos = lpos - :width WHERE lpos > :oldrpos
 *  UPDATE tags SET rpos = rpos - :width WHERE rpos > :oldrpos
 */

Zmienna :distance to odległość między nową i starą pozycją, :width to rozmiar poddrzewa, a :tmppos służy do śledzenia przemieszczania poddrzewa podczas aktualizacji. Te zmienne są zdefiniowane jako:

// calculate position adjustment variables
int width = node.getRpos() - node.getLpos() + 1;
int distance = newpos - node.getLpos();
int tmppos = node.getLpos();
        
// backwards movement must account for new space
if (distance < 0) {
    distance -= width;
    tmppos += width;
}

Pełny przykład kodu można znaleźć na moim blogu pod adresem

https://rogerkeays.com/how -przenieść-węzeł-w-zagnieżdżonych-zestawach-z-SQL

Jeśli podoba Ci się to rozwiązanie, zagłosuj na górę.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP i mySQL - ë zapisane jako ë

  2. MySQL REPLACE :Jak zastąpić wszystkie wystąpienia znaku w każdym odrębnym podciągu rozdzielonym tym samym nagłówkiem i ogonem

  3. Błąd 2006:serwer MySQL zniknął przy użyciu Pythona, Bottle Microframework i Apache

  4. Projektowanie relacji wokół struktury dziedziczenia

  5. Dynamicznie zmieniaj nazwę kolumny w instrukcji PDO