﻿<?xml version="1.0" encoding="utf-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Komentarze do: Struktura drzewiasta w bazie danych Odc. 5 Nested set &#8211; dodawanie rekordu</title>
	<atom:link href="http://blog.bexlab.pl/struktura-drzewiasta-w-bazie-danych-odc-5-nested-set-dodawanie-rekordu/498/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.bexlab.pl/struktura-drzewiasta-w-bazie-danych-odc-5-nested-set-dodawanie-rekordu/498/</link>
	<description>Zajrzyj, poczytaj, naucz się...</description>
	<lastBuildDate>Wed, 01 Feb 2012 15:10:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
	<item>
		<title>Autor: Joanna</title>
		<link>http://blog.bexlab.pl/struktura-drzewiasta-w-bazie-danych-odc-5-nested-set-dodawanie-rekordu/498/comment-page-1/#comment-1437</link>
		<dc:creator>Joanna</dc:creator>
		<pubDate>Wed, 30 Jun 2010 22:30:25 +0000</pubDate>
		<guid isPermaLink="false">http://blog.bexlab.pl/?p=498#comment-1437</guid>
		<description>Zagadnienie jest proste. Nowy element będzie miał lft i rgt określonej wartości. Wszystkie lft i rgt które są większe od wartości lft nowego elementu lub jej równe mają być podwyższone o 2 bez sprawdzania żadnych dodatkowych warunków. Koniec pieśni. Nie ma sensu komplikować sobie tak prostego zagadnienia :P</description>
		<content:encoded><![CDATA[<p>Zagadnienie jest proste. Nowy element będzie miał lft i rgt określonej wartości. Wszystkie lft i rgt które są większe od wartości lft nowego elementu lub jej równe mają być podwyższone o 2 bez sprawdzania żadnych dodatkowych warunków. Koniec pieśni. Nie ma sensu komplikować sobie tak prostego zagadnienia <img src='http://blog.bexlab.pl/wp-includes/images/smilies/icon_razz.gif' alt=':P' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Joanna</title>
		<link>http://blog.bexlab.pl/struktura-drzewiasta-w-bazie-danych-odc-5-nested-set-dodawanie-rekordu/498/comment-page-1/#comment-1436</link>
		<dc:creator>Joanna</dc:creator>
		<pubDate>Wed, 30 Jun 2010 22:20:37 +0000</pubDate>
		<guid isPermaLink="false">http://blog.bexlab.pl/?p=498#comment-1436</guid>
		<description>Ale my wcale nie musimy znać wartości rgt elementu nadrzędnego. Po stronie skryptu php jest sprawdzenie między jakimi wartościami rgt i lft chcemy wstawić rekord i więcej nic nas nie obchodzi. W związku z tym Twoja metoda nie ma zalet, bo polega na uwzględnianiu czegoś co nas nie obchodzi a w dodatku kosztem zupełnie zbędnego warunku. A że działa? No cóż. Zdarza się :)

Ty zdaje się wychodzisz z błędnego założenia. Po pierwsze wartość rgt elementu nadrzędnego nie może być mniejsza niż wartości rgt i lft elementu wstawianego, zawsze jest większa (oczywiście po przeliczeniu), więc Twoje dywagacje nie mają żadnego sensu.

Jeszcze raz powtarzam. Nie obchodzi nas wartość lft i rgl elementu nadrzędnego. Obchodzą nas jedynie te parametry między które chcemy się wepchnąć z nowym elementem. To mogą być lft i rgt elementów równorzędnych jak w przykładzie opisanym w tym artykule.  I na tym polega uniwersalność tych zapytań.

Celem zaś moich komentarzy jest nakłonienie Cię do dokładniejszego przestudiowania zagadnienia, bo nie do końca rozumiesz ideę. Być może jest w trochę mojej winy. Może zbyt pochopnie założyłam, że wystarczy &quot;rozpłaszczyć drzewo, żeby zrozumieć genialną prostotę tej konstrukcji.</description>
		<content:encoded><![CDATA[<p>Ale my wcale nie musimy znać wartości rgt elementu nadrzędnego. Po stronie skryptu php jest sprawdzenie między jakimi wartościami rgt i lft chcemy wstawić rekord i więcej nic nas nie obchodzi. W związku z tym Twoja metoda nie ma zalet, bo polega na uwzględnianiu czegoś co nas nie obchodzi a w dodatku kosztem zupełnie zbędnego warunku. A że działa? No cóż. Zdarza się <img src='http://blog.bexlab.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Ty zdaje się wychodzisz z błędnego założenia. Po pierwsze wartość rgt elementu nadrzędnego nie może być mniejsza niż wartości rgt i lft elementu wstawianego, zawsze jest większa (oczywiście po przeliczeniu), więc Twoje dywagacje nie mają żadnego sensu.</p>
<p>Jeszcze raz powtarzam. Nie obchodzi nas wartość lft i rgl elementu nadrzędnego. Obchodzą nas jedynie te parametry między które chcemy się wepchnąć z nowym elementem. To mogą być lft i rgt elementów równorzędnych jak w przykładzie opisanym w tym artykule.  I na tym polega uniwersalność tych zapytań.</p>
<p>Celem zaś moich komentarzy jest nakłonienie Cię do dokładniejszego przestudiowania zagadnienia, bo nie do końca rozumiesz ideę. Być może jest w trochę mojej winy. Może zbyt pochopnie założyłam, że wystarczy &#8222;rozpłaszczyć drzewo, żeby zrozumieć genialną prostotę tej konstrukcji.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Mad Max</title>
		<link>http://blog.bexlab.pl/struktura-drzewiasta-w-bazie-danych-odc-5-nested-set-dodawanie-rekordu/498/comment-page-1/#comment-1435</link>
		<dc:creator>Mad Max</dc:creator>
		<pubDate>Wed, 30 Jun 2010 21:45:53 +0000</pubDate>
		<guid isPermaLink="false">http://blog.bexlab.pl/?p=498#comment-1435</guid>
		<description>Ok,
Może inaczej :) Masz rację. Można zapytanie napisać w taki sposób w jaki podałaś wyżej. Sposób jest poprawny. Jednak moja metoda też działa i też jest poprawna. Wiem bo sprawdzałem :) . Obie mają wady i zalety.
W mojej jest do sprawdzenia dodatkowy warunek w klauzuli WHERE co wpływa na wydajność zapytania (nieznacznie ale jednak).
Jednak ma jedną zasadniczą zaletę.

Wykonując takie zapytanie:
UPDATE `tree` SET `rgt` = `rgt` + 2 WHERE `rgt` &gt;= 21 OR id = 1
Nie musimy znać wartości rgt. elementu nadrzędnego (w tym przypadku roota), bo nawet jeśli wartość elem. nadrzędnego jest większa od wartości rgt wstawianego elementu to elem. nadrzędny zostanie powiększony o 2 tak czy inaczej. Wystarczy, że znamy jego ID.

W twoim zapytaniu:
UPDATE `tree` SET `rgt` = `rgt` + 2 WHERE `rgt` &gt;= 20 musimy wiedzieć jaka jest wartość rgt elem. nadrzędnego, którą to musimy pobrać innym zapytaniem, np. SELECT MAX(rgt) FROM `tree`

Celem moich komentarzy nie jest udowodnienie, że metoda przez ciebie zastosowana jest zła. Jest po prostu inna od mojej, którą w dodatku sprawdziłem i która działa. Wbrew pozorom rozumiem ideę Nested Trees bo ją stosuję w swoich aplikacjach. Po prostu przedstawiłem swój punkt widzenia :)
Pozdrawiam,</description>
		<content:encoded><![CDATA[<p>Ok,<br />
Może inaczej <img src='http://blog.bexlab.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Masz rację. Można zapytanie napisać w taki sposób w jaki podałaś wyżej. Sposób jest poprawny. Jednak moja metoda też działa i też jest poprawna. Wiem bo sprawdzałem <img src='http://blog.bexlab.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  . Obie mają wady i zalety.<br />
W mojej jest do sprawdzenia dodatkowy warunek w klauzuli WHERE co wpływa na wydajność zapytania (nieznacznie ale jednak).<br />
Jednak ma jedną zasadniczą zaletę.</p>
<p>Wykonując takie zapytanie:<br />
UPDATE `tree` SET `rgt` = `rgt` + 2 WHERE `rgt` &gt;= 21 OR id = 1<br />
Nie musimy znać wartości rgt. elementu nadrzędnego (w tym przypadku roota), bo nawet jeśli wartość elem. nadrzędnego jest większa od wartości rgt wstawianego elementu to elem. nadrzędny zostanie powiększony o 2 tak czy inaczej. Wystarczy, że znamy jego ID.</p>
<p>W twoim zapytaniu:<br />
UPDATE `tree` SET `rgt` = `rgt` + 2 WHERE `rgt` &gt;= 20 musimy wiedzieć jaka jest wartość rgt elem. nadrzędnego, którą to musimy pobrać innym zapytaniem, np. SELECT MAX(rgt) FROM `tree`</p>
<p>Celem moich komentarzy nie jest udowodnienie, że metoda przez ciebie zastosowana jest zła. Jest po prostu inna od mojej, którą w dodatku sprawdziłem i która działa. Wbrew pozorom rozumiem ideę Nested Trees bo ją stosuję w swoich aplikacjach. Po prostu przedstawiłem swój punkt widzenia <img src='http://blog.bexlab.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /><br />
Pozdrawiam,</p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Joanna</title>
		<link>http://blog.bexlab.pl/struktura-drzewiasta-w-bazie-danych-odc-5-nested-set-dodawanie-rekordu/498/comment-page-1/#comment-1434</link>
		<dc:creator>Joanna</dc:creator>
		<pubDate>Wed, 30 Jun 2010 21:23:55 +0000</pubDate>
		<guid isPermaLink="false">http://blog.bexlab.pl/?p=498#comment-1434</guid>
		<description>Wychodzisz ze złego założenia. Skoro chcesz coś wstawić między 19 a 20 to (bez względu na to czy lft=19 a rgt=20 czy odwrotnie) zapytania musi być:
UPDATE `tree` SET `rgt` = `rgt` + 2 WHERE `rgt` &gt;= 20
UPDATE `tree` SET `lft` = `lft` + 2 WHERE `lft` &gt;= 20

I guzik Cię obchodzi, czy to root, czy inny element. Nie obchodzi Cie też w jakim stopniu już jest rozbudowane drzewo ani jaką ma konstrukcję. Naprawdę musisz jeszcze trochę przemyśleć ideę drzewa nested set :)</description>
		<content:encoded><![CDATA[<p>Wychodzisz ze złego założenia. Skoro chcesz coś wstawić między 19 a 20 to (bez względu na to czy lft=19 a rgt=20 czy odwrotnie) zapytania musi być:<br />
UPDATE `tree` SET `rgt` = `rgt` + 2 WHERE `rgt` >= 20<br />
UPDATE `tree` SET `lft` = `lft` + 2 WHERE `lft` >= 20</p>
<p>I guzik Cię obchodzi, czy to root, czy inny element. Nie obchodzi Cie też w jakim stopniu już jest rozbudowane drzewo ani jaką ma konstrukcję. Naprawdę musisz jeszcze trochę przemyśleć ideę drzewa nested set <img src='http://blog.bexlab.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Autor: Mad Max</title>
		<link>http://blog.bexlab.pl/struktura-drzewiasta-w-bazie-danych-odc-5-nested-set-dodawanie-rekordu/498/comment-page-1/#comment-1433</link>
		<dc:creator>Mad Max</dc:creator>
		<pubDate>Wed, 30 Jun 2010 10:46:54 +0000</pubDate>
		<guid isPermaLink="false">http://blog.bexlab.pl/?p=498#comment-1433</guid>
		<description>Ja wiem, że tak można zrobić i się z tym zgadzam :).
Tylko teraz załóżmy taki przypadek.
ROOT ma wartość rgt = 20 (jak w przykładzie wyżej)
Czyli ostatnia gałąź wychodząca z roota (Mac OS) ma wartość rgt = 19
Tera chcemy aby z ROOTa wychodziła jeszcze jedna gałąź, czyli musimy dać jej lft &gt; 19. Czyli dla nowej gałęzi wartość lft = 20, a dla rgt 21.

I spróbuj na swoim zapytaniu dodać taką gałąź. Nie da się.
Jeśli wiemy jakie wartości mają być w nowej gałęzi w polach lft i rgt, a zakładam, że wiemy, to przy zapytaniu:

UPDATE `tree` SET `rgt` = `rgt` + 2 WHERE `rgt` &gt;= 21

pole rgt w ROOT nie zostanie zmienione.</description>
		<content:encoded><![CDATA[<p>Ja wiem, że tak można zrobić i się z tym zgadzam <img src='http://blog.bexlab.pl/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> .<br />
Tylko teraz załóżmy taki przypadek.<br />
ROOT ma wartość rgt = 20 (jak w przykładzie wyżej)<br />
Czyli ostatnia gałąź wychodząca z roota (Mac OS) ma wartość rgt = 19<br />
Tera chcemy aby z ROOTa wychodziła jeszcze jedna gałąź, czyli musimy dać jej lft &gt; 19. Czyli dla nowej gałęzi wartość lft = 20, a dla rgt 21.</p>
<p>I spróbuj na swoim zapytaniu dodać taką gałąź. Nie da się.<br />
Jeśli wiemy jakie wartości mają być w nowej gałęzi w polach lft i rgt, a zakładam, że wiemy, to przy zapytaniu:</p>
<p>UPDATE `tree` SET `rgt` = `rgt` + 2 WHERE `rgt` &gt;= 21</p>
<p>pole rgt w ROOT nie zostanie zmienione.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

