Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> pytanie o nested set
wiewiorek
post
Post #1





Grupa: Zarejestrowani
Postów: 247
Pomógł: 11
Dołączył: 5.09.2009

Ostrzeżenie: (0%)
-----


Jak mamy w bazie danych tabelę z kolumnami:
id | id_parent | order
To dodając nowy element użytkownik wybiera z select listy rodzica oraz z drugiej select listy liczbę reprezentującą wagę/kolejność dodawanego elementu w stosunku do innych na tym samym poziomie.

A jak mamy w bazie danych tabelę ze strukturą charakterystyczną dla nested set:
id | left | right
To użytkownik dodając nowy element wybiera z select listy rodzica, ale w jaki sposób może ustalić wagę/kolejność nowo dodawanego elementu w stosunku do innych na tym samym poziomie ? Nie bardzo wiem jak umożliwić użytkownikom ustalenie kolejności.


Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
wiewiorek
post
Post #2





Grupa: Zarejestrowani
Postów: 247
Pomógł: 11
Dołączył: 5.09.2009

Ostrzeżenie: (0%)
-----


A ma ktos gotowe zapytania do przenoszenia poddrzewa ? Bo cos nie do konca mi dziala ten skrypt do przenoszenia galezi:
  1. --tabela:
  2. CREATE TABLE nested_category (
  3. category_id INT AUTO_INCREMENT PRIMARY KEY,
  4. name VARCHAR(20) NOT NULL,
  5. lft INT NOT NULL,
  6. rgt INT NOT NULL
  7. );
  8.  
  9. INSERT INTO nested_category
  10. VALUES(1,'ELECTRONICS',1,20),(2,'TELEVISIONS',2,9),(3,'TUBE',3,4),
  11. (4,'LCD',5,6),(5,'PLASMA',7,8),(6,'PORTABLE ELECTRONICS',10,19),
  12. (7,'MP3 PLAYERS',11,14),(8,'FLASH',12,13),
  13. (9,'CD PLAYERS',15,16),(10,'2 WAY RADIOS',17,18);


  1. --skrypt do przenoszenia galezi z categori_id = 2 do category_id = 6:
  2. LOCK TABLE nested_category WRITE;
  3.  
  4.  
  5. SELECT @myLeft := lft, @myRight := rgt, @myWidth := rgt - lft + 1
  6. FROM nested_category
  7. WHERE category_id = 2;
  8.  
  9. SELECT @newMyRight := rgt
  10. FROM nested_category
  11. WHERE category_id = 6;
  12.  
  13.  
  14. UPDATE nested_category
  15. SET lft = 0-lft, rgt = 0-rgt
  16. WHERE lft >= @myLeft AND rgt <= @myRight;
  17.  
  18.  
  19. UPDATE nested_category
  20. SET lft = lft - @myWidth
  21. WHERE lft > @myRight;
  22.  
  23. UPDATE nested_category
  24. SET rgt = rgt - @myWidth
  25. WHERE rgt > @myRight;
  26.  
  27.  
  28. UPDATE nested_category
  29. SET lft = lft + @node_size
  30. WHERE lft >= IF(@newMyRight > @myRight, @newMyRight - @myWidth, @newMyRight);
  31.  
  32. UPDATE nested_category
  33. SET rgt = rgt + @node_size
  34. WHERE rgt >= IF(@newMyRight > @myRight, @newMyRight - @myWidth, @newMyRight);
  35.  
  36.  
  37. UPDATE nested_category
  38. SET
  39. lft = 0-lft+IF(@newMyRight > @myRight, @newMyRight - @myRight - 1, @newMyRight - @myRight - 1 + @myWidth),
  40. rgt = 0-rgt+IF(@newMyRight > @myRight, @newMyRight - @myRight - 1, @newMyRight - @myRight - 1 + @myWidth)
  41. WHERE lft <= 0-@myLeft AND rgt >= 0-@myRight;
  42.  
  43.  
  44. UNLOCK TABLES;


Ten post edytował wiewiorek 5.08.2010, 20:13:44
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 19:19