Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Nested Sets - przenoszenie węzłów i liści góra/dół
grz16w
post
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 14.07.2009
Skąd: Rzeszów

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


Witam.

Czy ktoś wie lub posiada przykład działającej poprawnie funkcji przesuwania liści i węzłów w strukturze Nested Sets wewnątrz jednej gałęzi (rodzica)? Mam tabelę posiadającą kolumny `id`, `nazwa`, `lft`, `rgt`, `parent`. W jaki sposób zamienić miejscami dwa węzły lub liście wewnątrz tego samego rodzica (uwzględniając, że te węzły mogą posiadać również swoje dzieci itd.)? Z góry dziękuję serdecznie za odpowiedzi (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
Lub podzapytania. I nie odwracaj kota ogonem. Pisałeś, że to wyjątkowo trudne a ja twierdzę, że bułka z masłem.
To podzapytanie to o ile się nie mylę (już trochę późno jest) jeszcze gorszy pomysł. I nigdzie nie napisałem, że jest to "wyjątkowo trudne", tylko "dosyć skomplikowane" bo jest*. Programiście utrudnia prace, bo każdorazowo musi zaśmiecać treść zapytania fragmentem do wyliczenia tej wartości, a silnik bazy danych wręcz katowany jest jeżeli mamy do czynienia z jakimś sensowniejszym zestawem danych.
Cytat
Jeszcze bardziej bezsensowne jest przeliczanie kolumny ilekroć chcemy przenieść element lub gałąź.
Uznam, że po prostu z rozpędu już to palnąłeś. Bo właśnie napisałeś, że jednokrotne wyliczenie wartości i zapisanie jej jest bardziej bezsensowne niż każdorazowe wyliczenie tej samej wartości. Może jeszcze miałoby to sens w przypadku gdyby owa wyliczana wartość zajmowała masę miejsca, ale tutaj mowa jest o zwykłej liczbie całkowitej.
Cytat
Nie musisz lubić nested-set, bo jak wszystko mają swoje wady. Fajnie jednak by było, gdybyś nie wprowadzał w związku z tym ludzi w błąd pisząc, że to koszmarnie trudne.
A gdzie napisałem, że nie lubię? Zresztą jak można nie lubić "algorytmu"? I nie wciskaj mi słów których nigdy nie napisałem (patrz: koszmarnie trudne) bo takie coś jest po prostu bezczelne.

PS. Nie wiem czy zauważyłeś, ale kłócisz się (bo tak to zaczynam odbierać) o straszną pierdołę. O to, że zasugerowałem przechowywanie wyniku jednej operacji na stałe w bazie.

* Dobra, może "skomplikowane" to złe słowo tutaj - ale "niewygodne" pasuje idealnie.

Ten post edytował Crozin 11.04.2011, 23:34:08
Go to the top of the page
+Quote Post
JoShiMa
post
Post #3





Grupa: Zarejestrowani
Postów: 1 374
Pomógł: 149
Dołączył: 1.03.2006

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


Cytat(Crozin @ 11.04.2011, 23:32:32 ) *
To podzapytanie to o ile się nie mylę (już trochę późno jest) jeszcze gorszy pomysł.

Wręcz przeciwnie. Przy większych bazach jest szybsze.



Cytat(Crozin @ 11.04.2011, 23:32:32 ) *
I nigdzie nie napisałem, że jest to "wyjątkowo trudne", tylko "dosyć skomplikowane" bo jest*. Programiście utrudnia prace, bo każdorazowo musi zaśmiecać treść zapytania fragmentem do wyliczenia tej wartości

Za to przy Twoim sposobie każdorazowo musi zaśmiecać kod wyliczeniami nowych wartości depth przy przenoszeniu gałęzi. Przenosząc gałąź do innej lokalizacji musisz obliczyć depth dla tej lokalizacji. różnicę między wartością bieżącą a doelową i przeliczyć depth wszystkich elementów przenoszonej gałęzi. Rzeczywiście. Mniej skomplikowane. No sorry ale nie przekonasz mnie, że to jest jakiekolwiek ułatwienie. Nie wiem czemu ale odnoszę wrażenie, że znasz zagadnienie jedynie z teorii.

Aha. Wolałabym, żebyś się do mnie zwracał w rodzaju żeńskim.
Go to the top of the page
+Quote Post

Posty w temacie
- grz16w   Nested Sets - przenoszenie węzłów i liści góra/dół   10.04.2011, 22:42:12
- - Crozin   Zanim zapomnę: o ile dobrze pamiętam phpBB3 albo j...   10.04.2011, 23:13:45
- - jang   http://www.phpriot.com/articles/nested-trees-2/7 ...   11.04.2011, 08:18:26
- - JoShiMa   Cytat(grz16w @ 10.04.2011, 22:42:12 )...   11.04.2011, 10:24:51
|- - grz16w   Cytat(JoShiMa @ 11.04.2011, 11:24:51 ...   11.04.2011, 15:13:30
|- - JoShiMa   Cytat(grz16w @ 11.04.2011, 15:13:30 )...   11.04.2011, 21:38:11
|- - grz16w   Cytat(JoShiMa @ 11.04.2011, 22:38:11 ...   11.04.2011, 22:02:31
|- - JoShiMa   Cytat(grz16w @ 11.04.2011, 22:02:31 )...   11.04.2011, 22:37:33
- - Crozin   Można ale jest to dosyć skomplikowane, a trzymanie...   11.04.2011, 22:08:23
- - Crozin   @JoShiMa: Szkoda tylko, że nie dodałeś że dynamicz...   11.04.2011, 22:59:11
|- - JoShiMa   Cytat(Crozin @ 11.04.2011, 22:59:11 )...   11.04.2011, 23:08:01
- - Crozin   CytatLub podzapytania. I nie odwracaj kota ogonem....   11.04.2011, 23:32:32
|- - JoShiMa   Cytat(Crozin @ 11.04.2011, 23:32:32 )...   11.04.2011, 23:38:53
- - wiewiorek   Joshima napisal: "@Crozin naucz się wreszcie ...   12.04.2011, 07:55:05
|- - JoShiMa   Cytat(wiewiorek @ 12.04.2011, 07:55:0...   12.04.2011, 09:24:17
- - grz16w   Więc tak.. Użyłem metody: CytatSELECT node.name, ...   12.04.2011, 10:39:37
- - JoShiMa   A to zapytanie wywołujesz w bazie czy w skrypcie P...   12.04.2011, 11:03:46
- - grz16w   Wykonuję to zapytanie przez PHP. Gdy wykonuję w pa...   12.04.2011, 11:27:00
|- - JoShiMa   Cytat(grz16w @ 12.04.2011, 11:27:00 )...   12.04.2011, 21:52:17
- - Crozin   CytatCytatTo podzapytanie to o ile się nie mylę (j...   12.04.2011, 16:53:32
- - Crozin   Nic nie oszukuję. Przecież przy przenoszeniu i tak...   12.04.2011, 21:55:07


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: 27.12.2025 - 08:36