{"id":1385,"date":"2013-11-22T06:53:15","date_gmt":"2013-11-22T06:53:15","guid":{"rendered":"http:\/\/brain.payzip.co.kr\/?p=1385"},"modified":"2013-11-22T06:53:15","modified_gmt":"2013-11-22T06:53:15","slug":"%eb%ac%b4%ed%95%9c%ec%b9%b4%ed%85%8c%ea%b3%a0%eb%a6%ac","status":"publish","type":"post","link":"https:\/\/blog.goorigo.com\/?p=1385","title":{"rendered":"\ubb34\ud55c\uce74\ud14c\uace0\ub9ac"},"content":{"rendered":"<p>\uae4a\uc774\uac00 \uae4a\uc9c0\uc54a\ub294 \uce74\ud14c\uace0\ub9ac\uc5d0 \uc801\ub2f9<\/p>\n<p>=====================================================<br \/>\n&#8212;\u00a0\uce74\ud14c\uace0\ub9ac\u00a0\ud14c\uc774\ube14\uc744 \uc791\uc131\ud55c\ub2e4.<\/p>\n<p>DROP TABLE IF EXISTS category ;<br \/>\nCREATE TABLE category(<br \/>\ncategory_id INT AUTO_INCREMENT PRIMARY KEY,<br \/>\nname VARCHAR(20) NOT NULL,<br \/>\nparent INT DEFAULT NULL);<\/p>\n<p>INSERT INTO category<br \/>\nVALUES(1,&#8217;ELECTRONICS&#8217;,NULL),(2,&#8217;TELEVISIONS&#8217;,1),(3,&#8217;TUBE&#8217;,2),<br \/>\n(4,&#8217;LCD&#8217;,2),(5,&#8217;PLASMA&#8217;,2),(6,&#8217;PORTABLE ELECTRONICS&#8217;,1),<br \/>\n(7,&#8217;MP3 PLAYERS&#8217;,6),(8,&#8217;FLASH&#8217;,7),<br \/>\n(9,&#8217;CD PLAYERS&#8217;,6),(10,&#8217;2 WAY RADIOS&#8217;,6);<\/p>\n<p>SELECT * FROM category ORDER BY category_id;<\/p>\n<p>&#8212; self \uc870\uc778\uc744 \uc774\uc6a9\ud55c DEPTH ( LEVEL ) \uad6c\ud604 \ucffc\ub9ac<br \/>\n&#8212; \uc77c\ubc18\uc801\uc778 \ubc29\ubc95\uc774\ub2e4.<br \/>\nSELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4<br \/>\nFROM category AS t1<br \/>\nLEFT JOIN category AS t2 ON t2.parent = t1.category_id<br \/>\nLEFT JOIN category AS t3 ON t3.parent = t2.category_id<br \/>\nLEFT JOIN category AS t4 ON t4.parent = t3.category_id<br \/>\nWHERE t1.name = &#8216;ELECTRONICS&#8217;;<\/p>\n<p>&#8212; \ub808\ubca8\uc758 \ub9c8\uc9c0\ub9c9 leaf node \ub9cc\uc744 \uc870\ud68c<\/p>\n<p>SELECT t1.name FROM<br \/>\ncategory AS t1 LEFT JOIN category as t2<br \/>\nON t1.category_id = t2.parent<br \/>\nWHERE t2.category_id IS NULL;<\/p>\n<p>&#8212; \ud55c\uac1c\uc758\u00a0\uce74\ud14c\uace0\ub9ac\uc5d0 \ub300\ud574 \uc0c1\uc704\u00a0\uce74\ud14c\uace0\ub9ac\ub4e4 \uc870\ud68c<br \/>\nSELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4<br \/>\nFROM category AS t1<br \/>\nLEFT JOIN category AS t2 ON t2.parent = t1.category_id<br \/>\nLEFT JOIN category AS t3 ON t3.parent = t2.category_id<br \/>\nLEFT JOIN category AS t4 ON t4.parent = t3.category_id<br \/>\nWHERE t1.name = &#8216;ELECTRONICS&#8217; AND t4.name = &#8216;FLASH&#8217;;<\/p>\n<p>&#8212; SELF \uc870\uc778\uc774 \uc544\ub2cc \ubc29\ubc95\uc744 \uc774\uc6a9\ud558\uae30 \uc704\ud55c \ud14c\uc774\ube14 \uc0dd\uc131<br \/>\nDROP TABLE IF EXISTS\u00a0 nested_category ;<\/p>\n<p>SELECT node.name FROM `nested_category` AS node, `nested_category` AS parent<br \/>\nWHERE node.lft BETWEEN parent.lft AND parent.rgt<br \/>\nAND parent.name = &#8216;PORTABLE ELECTRONICS&#8217;<br \/>\nORDER BY node.lft;<\/p>\n<p>INSERT INTO nested_category<br \/>\nVALUES(1,&#8217;ELECTRONICS&#8217;,1,20),(2,&#8217;TELEVISIONS&#8217;,2,9),(3,&#8217;TUBE&#8217;,3,4),<br \/>\n(4,&#8217;LCD&#8217;,5,6),(5,&#8217;PLASMA&#8217;,7,8),(6,&#8217;PORTABLE ELECTRONICS&#8217;,10,19),<br \/>\n(7,&#8217;MP3 PLAYERS&#8217;,11,14),(8,&#8217;FLASH&#8217;,12,13),<br \/>\n(9,&#8217;CD PLAYERS&#8217;,15,16),(10,&#8217;2 WAY RADIOS&#8217;,17,18);<\/p>\n<p>&#8212; \ub2f9\u00a0\uce74\ud14c\uace0\ub9ac\uac00 \uc9c0\ub2c8\uace0 \uc788\ub294 \ud558\uc704\u00a0\uce74\ud14c\uace0\ub9ac\u00a0\ucd9c\ub825<\/p>\n<p>SELECT node.name<br \/>\nFROM nested_category AS node,<br \/>\nnested_category AS parent<br \/>\nWHERE node.lft BETWEEN parent.lft AND parent.rgt<br \/>\nAND parent.name = &#8216;PORTABLE ELECTRONICS&#8217;<br \/>\nORDER BY node.lft;<\/p>\n<p>&#8212; \ubaa8\ub4e0 \ub9c8\uc9c0\ub9c9 \ub808\ubca8 \uc870\ud68c<br \/>\nSELECT name<br \/>\nFROM nested_category<br \/>\nWHERE rgt = lft + 1;<\/p>\n<p>&#8212; \ud574\ub2f9\u00a0\uce74\ud14c\uace0\ub9ac\uac00 \uc18c\uc18d\ub418\ub294 \uc0c1\uc704\u00a0\uce74\ud14c\uace0\ub9ac\u00a0\ucd9c\ub825<br \/>\nSELECT parent.name<br \/>\nFROM nested_category AS node,<br \/>\nnested_category AS parent<br \/>\nWHERE node.lft BETWEEN parent.lft AND parent.rgt<br \/>\nAND node.name = &#8216;FLASH&#8217;<br \/>\nORDER BY parent.lft;<\/p>\n<p>&#8212;\u00a0\uce74\ud14c\uace0\ub9ac\ubcc4 TREE \uc758 \ub808\ubca8 \ucd9c\ub825<br \/>\nSELECT node.name, (COUNT(parent.name) &#8211; 1) AS depth<br \/>\nFROM nested_category AS node,<br \/>\nnested_category AS parent<br \/>\nWHERE node.lft BETWEEN parent.lft AND parent.rgt<br \/>\nGROUP BY node.name<br \/>\nORDER BY node.lft;<\/p>\n<p>&#8212; \ub4dc\ub514\uc5b4~!!\u00a0 \uc804\uccb4\u00a0\uce74\ud14c\uace0\ub9ac\uc758 TREE \uad6c\uc870 \ucd9c\ub825<\/p>\n<p>SELECT CONCAT( REPEAT(&#8220;\\t&#8221;, COUNT(parent.name) -1), node.name) AS name FROM nested_category AS node, nested_category AS parent<br \/>\nWHERE node.lft BETWEEN parent.lft AND parent.rgt GROUP BY node.name ORDER BY node.lft;<\/p>\n<div><\/div>\n<p>SELECT CONCAT( REPEAT(&#8216; &#8216;, COUNT(parent.name) &#8211; 1), node.name) AS name<br \/>\nFROM nested_category AS node,<br \/>\nnested_category AS parent<br \/>\nWHERE node.lft BETWEEN parent.lft AND parent.rgt<br \/>\nGROUP BY node.name<br \/>\nORDER BY node.lft;<\/p>\n<p>&#8212; \ub4dc\ub514\uc5b4~!!\u00a0 \uc804\uccb4\u00a0\uce74\ud14c\uace0\ub9ac\uc758 TREE \uad6c\uc870\ubc0f \ub808\ubca8 \ucd9c\ub8252<br \/>\nSELECT node.name,<br \/>\nCONCAT( REPEAT(&#8216;\u00a0 &#8216;, COUNT(parent.name) &#8211; 1), node.name) AS name2,<br \/>\n(COUNT(parent.name) &#8211; (sub_tree.depth + 1)) AS depth<br \/>\nFROM nested_category AS node,<br \/>\nnested_category AS parent,<br \/>\nnested_category AS sub_parent,<br \/>\n(<br \/>\nSELECT node.name, (COUNT(parent.name) &#8211; 1) AS depth<br \/>\nFROM nested_category AS node,<br \/>\nnested_category AS parent<br \/>\nWHERE node.lft BETWEEN parent.lft AND parent.rgt<br \/>\nAND node.name = &#8216;ELECTRONICS&#8217;<br \/>\nGROUP BY node.name<br \/>\nORDER BY node.lft<br \/>\n)AS sub_tree<br \/>\nWHERE node.lft BETWEEN parent.lft AND parent.rgt<br \/>\nAND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt<br \/>\nAND sub_parent.name = sub_tree.name<br \/>\nGROUP BY node.name<br \/>\nHAVING depth &lt;= 3\u00a0 &#8212; &#8216;ELECTRONICS&#8217; \uc758 \ud558\uc704\uc758 \uc870\ud68c \ub2e8\uacc4 \uc9c0\uc815<br \/>\nORDER BY node.lft;<\/p>\n<p>&#8212;\u00a0\uce74\ud14c\uace0\ub9ac\u00a0\ud558\uc704\uc758 \uc0c1\ud488 \ub4f1\ub85d\uc744 \uc704\ud55c \ud14c\uc774\ube14 \uc0dd\uc131<br \/>\nDROP TABLE IF EXISTS\u00a0 product ;<br \/>\nCREATE TABLE product(<br \/>\nproduct_id INT AUTO_INCREMENT PRIMARY KEY,<br \/>\nname VARCHAR(40),<br \/>\ncategory_id INT NOT NULL<br \/>\n);<\/p>\n<p>INSERT INTO product(name, category_id) VALUES(&#8217;20&#8221; TV&#8217;,3),(&#8217;36&#8221; TV&#8217;,3),<br \/>\n(&#8216;Super-LCD 42&#8243;&#8216;,4),(&#8216;Ultra-Plasma 62&#8243;&#8216;,5),(&#8216;Value Plasma 38&#8243;&#8216;,5),<br \/>\n(&#8216;Power-MP3 5gb&#8217;,7),(&#8216;Super-Player 1gb&#8217;,8),(&#8216;Porta CD&#8217;,9),(&#8216;CD To go!&#8217;,9),<br \/>\n(&#8216;Family Talk 360&#8217;,10);<\/p>\n<p>&#8212;\u00a0\uce74\ud14c\uace0\ub9ac\ubcc4 \ub4f1\ub85d\ub418\uc5b4 \uc788\ub294 \uc0c1\ud488\uc758 \uac1c\uc218 \uce74\uc6b4\ud2b8<br \/>\nSELECT parent.name, COUNT(product.name)<br \/>\nFROM<br \/>\nnested_category AS node<br \/>\nleft join\u00a0 nested_category AS parent<br \/>\non node.lft BETWEEN parent.lft AND parent.rgt<br \/>\nleft join product<br \/>\non node.category_id\u00a0 =\u00a0 product.category_id<br \/>\nGROUP BY parent.name<br \/>\nORDER BY node.lft;<\/p>\n<p>&#8212; \ud2b9\uc815\u00a0\uce74\ud14c\uace0\ub9ac\uc640 \ub3d9\uc77c \ub808\ubca8\uc758\u00a0\uce74\ud14c\uace0\ub9ac\u00a0\ucd94\uac00 ( \uc9c0\uc815\ud55c\u00a0\uce74\ud14c\uace0\ub9ac\u00a0\ub2e4\uc74c\uc5d0 \uc0dd\uc131)<br \/>\nset @myRight = 0;<br \/>\nSELECT @myRight := rgt<br \/>\nFROM nested_category<br \/>\nWHERE name = &#8216;TELEVISIONS&#8217;;<br \/>\nUPDATE nested_category SET rgt = rgt + 2 WHERE rgt &gt; @myRight;<br \/>\nUPDATE nested_category SET lft = lft + 2 WHERE lft &gt; @myRight;<br \/>\nINSERT INTO nested_category(name, lft, rgt) VALUES(&#8216;GAME CONSOLES&#8217;, @myRight + 1, @myRight + 2);<\/p>\n<p>&#8212; \uc870\ud68c<br \/>\nSELECT CONCAT( REPEAT(&#8216;\u00a0 \u00a0 &#8216;, COUNT(parent.name) &#8211; 1), node.name) AS name<br \/>\nFROM nested_category AS node,<br \/>\nnested_category AS parent<br \/>\nWHERE node.lft BETWEEN parent.lft AND parent.rgt<br \/>\nGROUP BY node.name<br \/>\nORDER BY node.lft;<\/p>\n<p>&#8212; \ud2b9\uc815\u00a0\uce74\ud14c\uace0\ub9ac\uc758 \ud558\uc704 \ub808\ubca8\uc5d0\u00a0\uce74\ud14c\uace0\ub9ac\u00a0\ucd94\uac00 ( \uc874\uc7ac\ud558\uace0 \uc788\ub294 \ud558\uc704 \ub808\ubca8\uc758 \uc55e\uc5d0 \uc0dd\uc131\uc774 \ub41c\ub2e4 )<br \/>\nset @myLeft = 0;<br \/>\nSELECT @myLeft := lft FROM nested_category WHERE name = &#8216;2 WAY RADIOS&#8217;;<br \/>\nUPDATE nested_category SET rgt = rgt + 2 WHERE rgt &gt; @myLeft;<br \/>\nUPDATE nested_category SET lft = lft + 2 WHERE lft &gt; @myLeft;<br \/>\nINSERT INTO nested_category(name, lft, rgt) VALUES(&#8216;FRS2&#8217;, @myLeft + 1, @myLeft + 2);<\/p>\n<p>&#8212; \uc870\ud68c<br \/>\nSELECT CONCAT( REPEAT(&#8216;\u00a0 \u00a0 &#8216;, COUNT(parent.name) &#8211; 1), node.name) AS name<br \/>\nFROM nested_category AS node,<br \/>\nnested_category AS parent<br \/>\nWHERE node.lft BETWEEN parent.lft AND parent.rgt<br \/>\nGROUP BY node.name<br \/>\nORDER BY node.lft;<\/p>\n<p>&#8212;\u00a0\uce74\ud14c\uace0\ub9ac\u00a0\uc0ad\uc81c<br \/>\nset @myRight = 0;<br \/>\nset @myLeft = 0;<br \/>\nSELECT @myLeft := lft, @myRight := rgt, @myWidth := rgt &#8211; lft + 1<br \/>\nFROM nested_category<br \/>\nWHERE name = &#8216;FRS2&#8217;;<br \/>\nDELETE FROM nested_category WHERE lft BETWEEN @myLeft AND @myRight;<br \/>\nUPDATE nested_category SET rgt = rgt &#8211; @myWidth WHERE rgt &gt; @myRight;<br \/>\nUPDATE nested_category SET lft = lft &#8211; @myWidth WHERE lft &gt; @myRight;<\/p>\n<p>&#8212; \uc870\ud68c<br \/>\nSELECT CONCAT( REPEAT(&#8216;\u00a0 \u00a0 &#8216;, COUNT(parent.name) &#8211; 1), node.name) AS name<br \/>\nFROM nested_category AS node,<br \/>\nnested_category AS parent<br \/>\nWHERE node.lft BETWEEN parent.lft AND parent.rgt<br \/>\nGROUP BY node.name<br \/>\nORDER BY node.lft;<\/p>\n<p>&#8212; \uc4f0\ub808\uae30 \uccad\uc18c<\/p>\n<p>DROP TABLE IF EXISTS category ;<br \/>\nDROP TABLE IF EXISTS\u00a0 nested_category ;<br \/>\nDROP TABLE IF EXISTS\u00a0 product ;<br \/>\n====================================================<\/p>\n<p><a href=\"http:\/\/ftp.nchu.edu.tw\/MySQL\/tech-resources\/articles\/hierarchical-data.html\">http:\/\/ftp.nchu.edu.tw\/MySQL\/tech-resources\/articles\/hierarchical-data.html<\/a><\/p>\n<p>\ucd9c\ucc98 :\u00a0<a href=\"http:\/\/blog.daum.net\/jeniusy\/6833332\">http:\/\/blog.daum.net\/jeniusy\/6833332<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\uae4a\uc774\uac00 \uae4a\uc9c0\uc54a\ub294 \uce74\ud14c\uace0\ub9ac\uc5d0 \uc801\ub2f9 ===================================================== &#8212;\u00a0\uce74\ud14c\uace0\ub9ac\u00a0\ud14c\uc774\ube14\uc744 \uc791\uc131\ud55c\ub2e4. DROP TABLE IF EXISTS category ; CREATE TABLE category( category_id INT AUTO_INCREMENT PRIMARY KEY, name VARCHAR(20) NOT NULL, parent INT DEFAULT NULL); INSERT&hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[1],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/posts\/1385"}],"collection":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=1385"}],"version-history":[{"count":0,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=\/wp\/v2\/posts\/1385\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=1385"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=1385"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.goorigo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=1385"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}