-
Notifications
You must be signed in to change notification settings - Fork 0
/
13beae0b.41236714.js
1 lines (1 loc) · 40.2 KB
/
13beae0b.41236714.js
1
(window.webpackJsonp=window.webpackJsonp||[]).push([[31],{482:function(A,e,n){"use strict";n.d(e,"a",(function(){return s})),n.d(e,"b",(function(){return o}));var t=n(0),a=n.n(t);function r(A,e,n){return e in A?Object.defineProperty(A,e,{value:n,enumerable:!0,configurable:!0,writable:!0}):A[e]=n,A}function l(A,e){var n=Object.keys(A);if(Object.getOwnPropertySymbols){var t=Object.getOwnPropertySymbols(A);e&&(t=t.filter((function(e){return Object.getOwnPropertyDescriptor(A,e).enumerable}))),n.push.apply(n,t)}return n}function c(A){for(var e=1;e<arguments.length;e++){var n=null!=arguments[e]?arguments[e]:{};e%2?l(Object(n),!0).forEach((function(e){r(A,e,n[e])})):Object.getOwnPropertyDescriptors?Object.defineProperties(A,Object.getOwnPropertyDescriptors(n)):l(Object(n)).forEach((function(e){Object.defineProperty(A,e,Object.getOwnPropertyDescriptor(n,e))}))}return A}function E(A,e){if(null==A)return{};var n,t,a=function(A,e){if(null==A)return{};var n,t,a={},r=Object.keys(A);for(t=0;t<r.length;t++)n=r[t],e.indexOf(n)>=0||(a[n]=A[n]);return a}(A,e);if(Object.getOwnPropertySymbols){var r=Object.getOwnPropertySymbols(A);for(t=0;t<r.length;t++)n=r[t],e.indexOf(n)>=0||Object.prototype.propertyIsEnumerable.call(A,n)&&(a[n]=A[n])}return a}var d=a.a.createContext({}),O=function(A){var e=a.a.useContext(d),n=e;return A&&(n="function"==typeof A?A(e):c(c({},e),A)),n},s=function(A){var e=O(A.components);return a.a.createElement(d.Provider,{value:e},A.children)},g={inlineCode:"code",wrapper:function(A){var e=A.children;return a.a.createElement(a.a.Fragment,{},e)}},i=a.a.forwardRef((function(A,e){var n=A.components,t=A.mdxType,r=A.originalType,l=A.parentName,d=E(A,["components","mdxType","originalType","parentName"]),s=O(n),i=t,o=s["".concat(l,".").concat(i)]||s[i]||g[i]||r;return n?a.a.createElement(o,c(c({ref:e},d),{},{components:n})):a.a.createElement(o,c({ref:e},d))}));function o(A,e){var n=arguments,t=e&&e.mdxType;if("string"==typeof A||t){var r=n.length,l=new Array(r);l[0]=i;var c={};for(var E in e)hasOwnProperty.call(e,E)&&(c[E]=e[E]);c.originalType=A,c.mdxType="string"==typeof A?A:t,l[1]=c;for(var d=2;d<r;d++)l[d]=n[d];return a.a.createElement.apply(null,l)}return a.a.createElement.apply(null,n)}i.displayName="MDXCreateElement"},580:function(A,e,n){"use strict";n.r(e),e.default="data:image/png;base64,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"},581:function(A,e,n){"use strict";n.r(e),e.default=n.p+"assets/images/nested_categories-cf9ee9f30132b1f718ee26e9683e5840.png"},582:function(A,e,n){"use strict";n.r(e),e.default=n.p+"assets/images/nested_numbered-f7055329cd4109808c56e003d47bb79d.png"},583:function(A,e,n){"use strict";n.r(e),e.default=n.p+"assets/images/numbered_tree-d7a203efc66639d322223aaa8822a2e5.png"},94:function(A,e,n){"use strict";n.r(e),n.d(e,"frontMatter",(function(){return l})),n.d(e,"metadata",(function(){return c})),n.d(e,"toc",(function(){return E})),n.d(e,"default",(function(){return O}));var t=n(3),a=n(7),r=(n(0),n(482)),l={},c={unversionedId:"database/ManagingHierarchicalData_in_MySQL",id:"database/ManagingHierarchicalData_in_MySQL",isDocsHomePage:!1,title:"ManagingHierarchicalData_in_MySQL",description:"Managing Hierarchical Data in MySQL",source:"@site/docs/database/ManagingHierarchicalData_in_MySQL.md",slug:"/database/ManagingHierarchicalData_in_MySQL",permalink:"/docs/database/ManagingHierarchicalData_in_MySQL",version:"current",sidebar:"database",previous:{title:"index",permalink:"/docs/database/index"},next:{title:"SQL_Cheat_Sheet",permalink:"/docs/database/SQL_Cheat_Sheet"}},E=[{value:"ADJACENCY LIST MODEL \uc778\uc811 \ubaa9\ub85d \ubaa8\ub378",id:"adjacency-list-model-\uc778\uc811-\ubaa9\ub85d-\ubaa8\ub378",children:[{value:"\uc804\uccb4 \ud2b8\ub9ac \uac80\uc0c9",id:"\uc804\uccb4-\ud2b8\ub9ac-\uac80\uc0c9",children:[]},{value:"\ubaa8\ub4e0 \ub9ac\ud504 \ub178\ud2b8 \ucc3e\uae30",id:"\ubaa8\ub4e0-\ub9ac\ud504-\ub178\ud2b8-\ucc3e\uae30",children:[]},{value:"\ub2e8\uc77c \uacbd\ub85c \uac80\uc0c9",id:"\ub2e8\uc77c-\uacbd\ub85c-\uac80\uc0c9",children:[]},{value:"\uc778\uc811\uc131 \ubaa9\ub85d \ubaa8\ub378\uc758 \ud55c\uacc4",id:"\uc778\uc811\uc131-\ubaa9\ub85d-\ubaa8\ub378\uc758-\ud55c\uacc4",children:[]}]},{value:"Nested Set Model \uc911\ucca9 \uc138\ud2b8 \ubaa8\ub378",id:"nested-set-model-\uc911\ucca9-\uc138\ud2b8-\ubaa8\ub378",children:[{value:"\uc804\uccb4 \ud2b8\ub9ac \uac80\uc0c9",id:"\uc804\uccb4-\ud2b8\ub9ac-\uac80\uc0c9-1",children:[]},{value:"\ubaa8\ub4e0 \ub9ac\ud504 \ub178\ub4dc \ucc3e\uae30",id:"\ubaa8\ub4e0-\ub9ac\ud504-\ub178\ub4dc-\ucc3e\uae30",children:[]},{value:"\ub2e8\uc77c \uacbd\ub85c \uac80\uc0c9",id:"\ub2e8\uc77c-\uacbd\ub85c-\uac80\uc0c9-1",children:[]},{value:"\ub178\ub4dc\uc758 \uae4a\uc774 \ucc3e\uae30",id:"\ub178\ub4dc\uc758-\uae4a\uc774-\ucc3e\uae30",children:[]},{value:"\uc11c\ube0c \ud2b8\ub9ac\uc758 \uae4a\uc774",id:"\uc11c\ube0c-\ud2b8\ub9ac\uc758-\uae4a\uc774",children:[]},{value:"\ub178\ub4dc\uc758 \uc989\uac01\uc801\uc778 \ud558\uc704 \ud56d\ubaa9 \ucc3e\uae30",id:"\ub178\ub4dc\uc758-\uc989\uac01\uc801\uc778-\ud558\uc704-\ud56d\ubaa9-\ucc3e\uae30",children:[]},{value:"\uc0c8 \ub178\ub4dc \ucd94\uac00",id:"\uc0c8-\ub178\ub4dc-\ucd94\uac00",children:[]}]}],d={toc:E};function O(A){var e=A.components,l=Object(a.a)(A,["components"]);return Object(r.b)("wrapper",Object(t.a)({},d,l,{components:e,mdxType:"MDXLayout"}),Object(r.b)("h1",{id:"managing-hierarchical-data-in-mysql"},Object(r.b)("a",{parentName:"h1",href:"https://mikehillyer.com/articles/managing-hierarchical-data-in-mysql/"},"Managing Hierarchical Data in MySQL")),Object(r.b)("p",null,"\uacc4\uce35\uc801 \ub370\uc774\ud130 \uad00\ub9ac\ub294 \uad00\uacc4\ud615\ub370\uc774\ud130\ubca0\uc774\uc2a4\uc758 \ubaa9\uc801\uc774 \uc544\ub2c8\ub2e4.\n\uc804\ud1b5\uc801\uc778 \uc778\uc811 \ubaa9\ub85d \ubaa8\ub378\uc5d0\uc11c \uc2dc\uc791\ud558\uc5ec MySql\uc5d0\uc11c \uacc4\uce35\uc801 \ub370\uc774\ud130\ub97c \ub2e4\ub8e8\uae30 \uc704\ud55c \ub450\uac00\uc9c0 \ubaa8\ub378\uc744 \uc18c\uac1c\ud55c\ub2e4. "),Object(r.b)("h2",{id:"adjacency-list-model-\uc778\uc811-\ubaa9\ub85d-\ubaa8\ub378"},"ADJACENCY LIST MODEL \uc778\uc811 \ubaa9\ub85d \ubaa8\ub378"),Object(r.b)("p",null,Object(r.b)("img",{alt:"ADJACENCY LIST MODEL",src:n(580).default})),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"CREATE TABLE category ( \n category_id INT AUTO_INCREMENT \uae30\ubcf8 \ud0a4, \n \uc774\ub984 VARCHAR (20) NOT NULL, \n \ubd80\ubaa8 INT DEFAULT NULL \n); \n\n\ubc94\uc8fc \uac12\uc5d0 \uc0bd\uc785 (1, 'ELECTRONICS', NULL), (2, 'TELEVISIONS', 1), (3, 'TUBE', 2), \n (4, 'LCD', 2), (5, 'PLASMA' , 2), (6, '\ud734\ub300\uc6a9 \uc804\uc790 \uc81c\ud488', 1), (7, 'MP3 \ud50c\ub808\uc774\uc5b4', 6), (8, '\ud50c\ub798\uc2dc', 7), \n (9, 'CD \ud50c\ub808\uc774\uc5b4', 6), (10, '2 \uc6e8\uc774 \ub77c\ub514\uc624', 6); \n\nSELECT * FROM \uce74\ud14c\uace0\ub9ac ORDER BY category_id; \n+ ------------- + ---------------------- + -------- + \n| category_id | \uc774\ub984 | \ubd80\ubaa8 | \n+ ------------- + ---------------------- + -------- + \n| 1 | \uc804\uc790 \uc81c\ud488 | NULL | \n| 2 | \ud154\ub808\ube44\uc804 | 1 |\n| 3 | \uad00 | 2 | \n| 4 | LCD | 2 | \n| 5 | \ud50c\ub77c\uc988\ub9c8 | 2 | \n| 6 | \ud734\ub300\uc6a9 \uc804\uc790 \uc81c\ud488 | 1 | \n| 7 | MP3 \ud50c\ub808\uc774\uc5b4 | 6 | \n| 8 | \ud50c\ub798\uc2dc | 7 | \n| 9 | CD \ud50c\ub808\uc774\uc5b4 | 6 | \n| 10 | 2 \uc6e8\uc774 \ub77c\ub514\uc624 | 6 | \n+ ------------- + ---------------------- + -------- + \n10 \ud589 \uc138\ud2b8 (0.00 \ucd08)\n")),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"\uac01 \ud56d\ubaa9\uc5d0\ub294 \uc0c1\uc704 \ud56d\ubaa9\uc5d0 \ub300\ud55c \ud3ec\uc778\ud130\uac00 \uc874\uc7ac\ud55c\ub2e4. \ucd5c\uc0c1\uc704 \uc694\uc18c\uc77c \uacbd\uc6b0 \uc0c1\uc704\uc694\uc18c\uc5d0 \ub300\ud574 NULL \uc774\ub2e4."),Object(r.b)("li",{parentName:"ul"},"\ub9e4\uc6b0 \uac04\ub2e8"),Object(r.b)("li",{parentName:"ul"},"\ud074\ub77c\uc774\uc5b8\ud2b8\uce21 \ucf54\ub4dc\uc5d0\uc11c\ub294 \uc0c1\ub2f9\ud788 \uc27d\uac8c \ucc98\ub9ac\ud560 \uc218 \uc788\uc9c0\ub9cc \uc21c\uc218 SQL\uc5d0\uc11c\ub294 \ubaa8\ub378 \uc791\uc5c5\uc774 \ubb38\uc81c\uac00 \ub420 \uc218 \uc788\ub2e4.")),Object(r.b)("h3",{id:"\uc804\uccb4-\ud2b8\ub9ac-\uac80\uc0c9"},"\uc804\uccb4 \ud2b8\ub9ac \uac80\uc0c9"),Object(r.b)("p",null,"\uacc4\uce35\uc801 \ub370\uc774\ud130\ub97c \ucc98\ub9ac\ud560 \ub54c,\n\uc804\uccb4 \ud2b8\ub9ac \ud45c\uc2dc\ub97c \uac00\uc7a5 \uba3c\uc800 \ud55c\ub2e4. "),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"\uc21c\uc218 SQL\uc5d0\uc11c \uc790\uccb4 \uc870\uc778\uc744 \uc0ac\uc6a9\ud558\ub294\uac83\uc774 \uac00\uc7a5 \uc77c\ubc18\uc801\uc774\ub2e4.")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4\nFROM category AS t1\nLEFT JOIN category AS t2 ON t2.parent = t1.category_id\nLEFT JOIN category AS t3 ON t3.parent = t2.category_id\nLEFT JOIN category AS t4 ON t4.parent = t3.category_id\nWHERE t1.name = 'ELECTRONICS';\n\n+-------------+----------------------+--------------+-------+\n| lev1 | lev2 | lev3 | lev4 |\n+-------------+----------------------+--------------+-------+\n| ELECTRONICS | TELEVISIONS | TUBE | NULL |\n| ELECTRONICS | TELEVISIONS | LCD | NULL |\n| ELECTRONICS | TELEVISIONS | PLASMA | NULL |\n| ELECTRONICS | PORTABLE ELECTRONICS | MP3 PLAYERS | FLASH |\n| ELECTRONICS | PORTABLE ELECTRONICS | CD PLAYERS | NULL |\n| ELECTRONICS | PORTABLE ELECTRONICS | 2 WAY RADIOS | NULL |\n+-------------+----------------------+--------------+-------+\n6 rows in set (0.00 sec)\n")),Object(r.b)("h3",{id:"\ubaa8\ub4e0-\ub9ac\ud504-\ub178\ud2b8-\ucc3e\uae30"},"\ubaa8\ub4e0 \ub9ac\ud504 \ub178\ud2b8 \ucc3e\uae30"),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"left join \uc744 \uc0ac\uc6a9\ud558\uc5ec \ud2b8\ub9ac\uc5d0\uc11c \ud558\uc704\ub178\ub4dc\uac00 \uc5c6\ub294 \ubaa8\ub4e0 \ub9ac\ud504 \ub178\ub4dc\ub97c \ucc3e\uc744 \uc218 \uc788\ub2e4.")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"SELECT t1.name FROM\ncategory AS t1 LEFT JOIN category as t2\nON t1.category_id = t2.parent\nWHERE t2.category_id IS NULL;\n\n+--------------+\n| name |\n+--------------+\n| TUBE |\n| LCD |\n| PLASMA |\n| FLASH |\n| CD PLAYERS |\n| 2 WAY RADIOS |\n+--------------+\n")),Object(r.b)("h3",{id:"\ub2e8\uc77c-\uacbd\ub85c-\uac80\uc0c9"},"\ub2e8\uc77c \uacbd\ub85c \uac80\uc0c9"),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0}," SELECT t1.name AS lev1, t2.name as lev2, t3.name as lev3, t4.name as lev4\n FROM category AS t1\n LEFT JOIN category AS t2 ON t2.parent = t1.category_id\n LEFT JOIN category AS t3 ON t3.parent = t2.category_id\n LEFT JOIN category AS t4 ON t4.parent = t3.category_id\n WHERE t1.name = 'ELECTRONICS' AND t4.name = 'FLASH';\n \n +-------------+----------------------+-------------+-------+\n | lev1 | lev2 | lev3 | lev4 |\n +-------------+----------------------+-------------+-------+\n | ELECTRONICS | PORTABLE ELECTRONICS | MP3 PLAYERS | FLASH |\n +-------------+----------------------+-------------+-------+\n 1 row in set (0.01 sec)\n")),Object(r.b)("p",null,"\ubaa8\ub4e0 \uc218\uc900 \ud558\ub098\ud558\ub098\uc5d0 \uc800\uccb4 \uc870\uc778\uc774 \ud544\uc694\ud558\uba70 \uacb0\ud569\uc774 \ubcf5\uc7a1\ud574\uc9d0\uc5d0 \ub530\ub77c \uc131\ub2a5\uc774 \uc800\ud558\ub41c\ub2e4. "),Object(r.b)("h3",{id:"\uc778\uc811\uc131-\ubaa9\ub85d-\ubaa8\ub378\uc758-\ud55c\uacc4"},"\uc778\uc811\uc131 \ubaa9\ub85d \ubaa8\ub378\uc758 \ud55c\uacc4"),Object(r.b)("ol",null,Object(r.b)("li",{parentName:"ol"},"\uce74\ud14c\uace0\ub9ac\uc758 \uc804\uccb4 \uacbd\ub85c\ub97c \ubcf4\uae30 \uc804\uc5d0 \uce74\ud14c\uace0\ub9ac\uc758 \ub808\ubca8\uc744 \uc54c\uc544\uc57c \ud55c\ub2e4."),Object(r.b)("li",{parentName:"ol"},"\ub178\ub4dc\ub97c \uc0ad\uc81c\ud560 \ub54c \ud2b9\ubcc4\ud55c \uc8fc\uc758\uac00 \ud544\uc694\ud558\ub2e4.")),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"\uc808\ucc28\uc801 \ud504\ub85c\uadf8\ub798\ubc0d\uc744 \uc0ac\uc6a9\ud558\uc5ec \ud2b8\ub9ac\uc758 \ub9e8 \uc544\ub798\uc5d0\uc11c \uc2dc\uc791\ud558\uc5ec \uc704\ucabd\uc73c\ub85c \ubc18\ubcf5\ud558\uc5ec \uacbd\ub85c\ub97c \ubc18\ud658\ud560 \uc218 \uc788\ub2e4. "),Object(r.b)("li",{parentName:"ul"},"\ud558\ub098\uc758 \ud558\uc704 \uc694\uc18c\ub97c \uc2b9\uaca9\uc2dc\ud0a4\uace0 \ub098\uba38\uc9c0 \ud558\uc704\ub97c \uc0c8 \uc0c1\uc704\ub97c \uac00\ub9ac\ud0a4\ub3c4\ub85d \uc7ac\uc815\ub82c\ud558\uc5ec \uc0ad\uc81c\ud560\uc218 \uc788\ub2e4. ")),Object(r.b)("h2",{id:"nested-set-model-\uc911\ucca9-\uc138\ud2b8-\ubaa8\ub378"},"Nested Set Model \uc911\ucca9 \uc138\ud2b8 \ubaa8\ub378"),Object(r.b)("p",null,Object(r.b)("img",{alt:"nested_categroies",src:n(581).default})),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"\ub178\ub4dc\uc640 \uc120\uc774 \uc544 \uc911\ucca9 \ucee8\ud14c\uc774\ub108\ub85c\uc758 \uacc4\uce35 \ubc29\uc2dd "),Object(r.b)("li",{parentName:"ul"},"\ub178\ub4dc\uc758 \uc911\ucca9\uc744 \ub098\ud0c0\ub0b4\ub294 \uc67c\ucabd \ubc0f \uc624\ub978\ucabd \uac12\uc744 \uc0ac\uc6a9\ud558\uc5ec\uc774 \ud615\uc2dd\uc758 \uacc4\uce35 \uad6c\uc870\ub97c \ud14c\uc774\ube14\uc5d0 \ub098\ud0c0\ub0c5\ub2c8\ub2e4.")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"CREATE TABLE nested_category (\n category_id INT AUTO_INCREMENT PRIMARY KEY,\n name VARCHAR(20) NOT NULL,\n lft INT NOT NULL,\n rgt INT NOT NULL\n);\n\nINSERT INTO nested_category VALUES(1,'ELECTRONICS',1,20),(2,'TELEVISIONS',2,9),(3,'TUBE',3,4),\n (4,'LCD',5,6),(5,'PLASMA',7,8),(6,'PORTABLE ELECTRONICS',10,19),(7,'MP3 PLAYERS',11,14),(8,'FLASH',12,13),\n (9,'CD PLAYERS',15,16),(10,'2 WAY RADIOS',17,18);\n\nSELECT * FROM nested_category ORDER BY category_id;\n\n+-------------+----------------------+-----+-----+\n| category_id | name | lft | rgt |\n+-------------+----------------------+-----+-----+\n| 1 | ELECTRONICS | 1 | 20 |\n| 2 | TELEVISIONS | 2 | 9 |\n| 3 | TUBE | 3 | 4 |\n| 4 | LCD | 5 | 6 |\n| 5 | PLASMA | 7 | 8 |\n| 6 | PORTABLE ELECTRONICS | 10 | 19 |\n| 7 | MP3 PLAYERS | 11 | 14 |\n| 8 | FLASH | 12 | 13 |\n| 9 | CD PLAYERS | 15 | 16 |\n| 10 | 2 WAY RADIOS | 17 | 18 |\n+-------------+----------------------+-----+-----+\n")),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},Object(r.b)("p",{parentName:"li"},"\uc67c\ucabd \uc624\ub978\ucabd \uac12\uc758 \uacb0\uc815 : \ub178\ub4dc\uc758 \uac00\uc7a5 \uc67c\ucabd\ubd80\ud130 \ubc88\ud638\ub97c \ub9e4\uae34\ub2e4.\n",Object(r.b)("img",{alt:"nested_numbered",src:n(582).default}))),Object(r.b)("li",{parentName:"ul"},Object(r.b)("p",{parentName:"li"},"\ud2b8\ub9ac\uc5d0 \uc801\uc6a9 -> modified preorder tree traversal algorithm.\n",Object(r.b)("img",{alt:"numbered_tree",src:n(583).default})))),Object(r.b)("h3",{id:"\uc804\uccb4-\ud2b8\ub9ac-\uac80\uc0c9-1"},"\uc804\uccb4 \ud2b8\ub9ac \uac80\uc0c9"),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"\ub178\ub4dc\uc758 lft \uac12\uc774 \ud56d\uc0c1 \ubd80\ubaa8\uc758 lft \ubcf4\ub2e4 \ud06c\uace0 rgt \ubcf4\ub2e4 \uc791\ub2e4"),Object(r.b)("li",{parentName:"ul"},"\ubd80\ubaa8\uc640 \ub178\ub4dc\ub97c \uc5f0\uacb0\ud558\ub294 self \uc870\uc778\uc744 \uc0ac\uc6a9\ud558\uc5ec \uc804\uccb4 \ud2b8\ub9ac\ub97c \uac80\uc0c9\ud55c\ub2e4."),Object(r.b)("li",{parentName:"ul"},"\ud2b8\ub9ac \uae4a\uc774\uc5d0 \uc0c1\uad00\uc5c6\uc774 \uc791\ub3d9\ud55c\ub2e4. ")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"SELECT node.name\nFROM nested_category AS node,\n nested_category AS parent\nWHERE node.lft BETWEEN parent.lft AND parent.rgt\n AND parent.name = 'ELECTRONICS'\nORDER BY node.lft;\n\n+----------------------+\n| name |\n+----------------------+\n| ELECTRONICS |\n| TELEVISIONS |\n| TUBE |\n| LCD |\n| PLASMA |\n| PORTABLE ELECTRONICS |\n| MP3 PLAYERS |\n| FLASH |\n| CD PLAYERS |\n| 2 WAY RADIOS |\n+----------------------+\n")),Object(r.b)("h3",{id:"\ubaa8\ub4e0-\ub9ac\ud504-\ub178\ub4dc-\ucc3e\uae30"},"\ubaa8\ub4e0 \ub9ac\ud504 \ub178\ub4dc \ucc3e\uae30"),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"SELECT name\nFROM nested_category\nWHERE rgt = lft + 1;\n\n+--------------+\n| name |\n+--------------+\n| TUBE |\n| LCD |\n| PLASMA |\n| FLASH |\n| CD PLAYERS |\n| 2 WAY RADIOS |\n+--------------+\n")),Object(r.b)("h3",{id:"\ub2e8\uc77c-\uacbd\ub85c-\uac80\uc0c9-1"},"\ub2e8\uc77c \uacbd\ub85c \uac80\uc0c9"),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"SELECT parent.name\nFROM nested_category AS node,\n nested_category AS parent\nWHERE node.lft BETWEEN parent.lft AND parent.rgt\n AND node.name = 'FLASH'\nORDER BY parent.lft;\n\n+----------------------+\n| name |\n+----------------------+\n| ELECTRONICS |\n| PORTABLE ELECTRONICS |\n| MP3 PLAYERS |\n| FLASH |\n+----------------------+\n")),Object(r.b)("h3",{id:"\ub178\ub4dc\uc758-\uae4a\uc774-\ucc3e\uae30"},"\ub178\ub4dc\uc758 \uae4a\uc774 \ucc3e\uae30"),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"SELECT node.name, (COUNT(parent.name) - 1) AS depth\nFROM nested_category AS node,\n nested_category AS parent\nWHERE node.lft BETWEEN parent.lft AND parent.rgt\nGROUP BY node.name\nORDER BY node.lft;\n\n+----------------------+-------+\n| name | depth |\n+----------------------+-------+\n| ELECTRONICS | 0 |\n| TELEVISIONS | 1 |\n| TUBE | 2 |\n| LCD | 2 |\n| PLASMA | 2 |\n| PORTABLE ELECTRONICS | 1 |\n| MP3 PLAYERS | 2 |\n| FLASH | 3 |\n| CD PLAYERS | 2 |\n| 2 WAY RADIOS | 2 |\n+----------------------+-------+\n")),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"concat, repeat \ud568\uc218\ub85c \uce74\ud14c\uace0\ub9ac \uc774\ub984\uc744 \ub4e4\uc5ec\uc4f0\uae30 \ud560 \uc218 \uc788\ub2e4. ")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"SELECT CONCAT( REPEAT(' ', COUNT(parent.name) - 1), node.name) AS name\nFROM nested_category AS node,\n nested_category AS parent\nWHERE node.lft BETWEEN parent.lft AND parent.rgt\nGROUP BY node.name\nORDER BY node.lft;\n\n+-----------------------+\n| name |\n+-----------------------+\n| ELECTRONICS |\n| TELEVISIONS |\n| TUBE |\n| LCD |\n| PLASMA |\n| PORTABLE ELECTRONICS |\n| MP3 PLAYERS |\n| FLASH |\n| CD PLAYERS |\n| 2 WAY RADIOS |\n+-----------------------+\n")),Object(r.b)("h3",{id:"\uc11c\ube0c-\ud2b8\ub9ac\uc758-\uae4a\uc774"},"\uc11c\ube0c \ud2b8\ub9ac\uc758 \uae4a\uc774"),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"\ud558\uc704 \ucffc\ub9ac\uc640 \ud568\uaed8 \uc138 \ubc88\uc9f8 self \uc870\uc778\uc744 \ucd94\uac00\ud558\uc5ec \ud558\uc704 \ud2b8\ub9ac \uc0c8\ub85c\uc6b4 \uc2dc\uc791\uc810\uc774 \ub420 \uae4a\uc774\ub97c \uacb0\uc815\ud55c\ub2e4.")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"ELECT node.name, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth\nFROM nested_category AS node,\n nested_category AS parent,\n nested_category AS sub_parent,\n (\n SELECT node.name, (COUNT(parent.name) - 1) AS depth\n FROM nested_category AS node,\n nested_category AS parent\n WHERE node.lft BETWEEN parent.lft AND parent.rgt\n AND node.name = 'PORTABLE ELECTRONICS'\n GROUP BY node.name\n ORDER BY node.lft\n )AS sub_tree\nWHERE node.lft BETWEEN parent.lft AND parent.rgt\n AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt\n AND sub_parent.name = sub_tree.name\nGROUP BY node.name\nORDER BY node.lft;\n\n+----------------------+-------+\n| name | depth |\n+----------------------+-------+\n| PORTABLE ELECTRONICS | 0 |\n| MP3 PLAYERS | 1 |\n| FLASH | 2 |\n| CD PLAYERS | 1 |\n| 2 WAY RADIOS | 1 |\n+----------------------+-------+\n")),Object(r.b)("h3",{id:"\ub178\ub4dc\uc758-\uc989\uac01\uc801\uc778-\ud558\uc704-\ud56d\ubaa9-\ucc3e\uae30"},"\ub178\ub4dc\uc758 \uc989\uac01\uc801\uc778 \ud558\uc704 \ud56d\ubaa9 \ucc3e\uae30"),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"\uc0c1\uc704 \ub178\ub4dc\ub97c \ud45c\uc2dc\ud558\uc9c0 \uc54a\uc73c\ub824\uba74 having depth = 1 \ub85c \ubcc0\uacbd")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"SELECT node.name, (COUNT(parent.name) - (sub_tree.depth + 1)) AS depth\nFROM nested_category AS node,\n nested_category AS parent,\n nested_category AS sub_parent,\n (\n SELECT node.name, (COUNT(parent.name) - 1) AS depth\n FROM nested_category AS node,\n nested_category AS parent\n WHERE node.lft BETWEEN parent.lft AND parent.rgt\n AND node.name = 'PORTABLE ELECTRONICS'\n GROUP BY node.name\n ORDER BY node.lft\n )AS sub_tree\nWHERE node.lft BETWEEN parent.lft AND parent.rgt\n AND node.lft BETWEEN sub_parent.lft AND sub_parent.rgt\n AND sub_parent.name = sub_tree.name\nGROUP BY node.name\nHAVING depth <= 1\nORDER BY node.lft;\n\n+----------------------+-------+\n| name | depth |\n+----------------------+-------+\n| PORTABLE ELECTRONICS | 0 |\n| MP3 PLAYERS | 1 |\n| CD PLAYERS | 1 |\n| 2 WAY RADIOS | 1 |\n+----------------------+-------+\n")),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"\uc911\ucca9 \uc9d1\ud569\uc758 \uc9d1\uacc4 \ud568\uc218")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"CREATE TABLE product\n(\n product_id INT AUTO_INCREMENT PRIMARY KEY,\n name VARCHAR(40),\n category_id INT NOT NULL\n);\n\nINSERT INTO product(name, category_id) VALUES('20\" TV',3),('36\" TV',3),\n('Super-LCD 42\"',4),('Ultra-Plasma 62\"',5),('Value Plasma 38\"',5),\n('Power-MP3 5gb',7),('Super-Player 1gb',8),('Porta CD',9),('CD To go!',9),\n('Family Talk 360',10);\n\nSELECT * FROM product;\n\n+------------+-------------------+-------------+\n| product_id | name | category_id |\n+------------+-------------------+-------------+\n| 1 | 20\" TV | 3 |\n| 2 | 36\" TV | 3 |\n| 3 | Super-LCD 42\" | 4 |\n| 4 | Ultra-Plasma 62\" | 5 |\n| 5 | Value Plasma 38\" | 5 |\n| 6 | Power-MP3 128mb | 7 |\n| 7 | Super-Shuffle 1gb | 8 |\n| 8 | Porta CD | 9 |\n| 9 | CD To go! | 9 |\n| 10 | Family Talk 360 | 10 |\n+------------+-------------------+-------------+\n")),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"\uce74\ud14c\uace0\ub9ac \ud2b8\ub9ac\uc640 \uac01 \uce74\ud14c\uace0\ub9ac\uc758 \uc81c\ud488 \uc218\ub97c \uac80\uc0c9")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"SELECT parent.name, COUNT(product.name)\nFROM nested_category AS node ,\n nested_category AS parent,\n product\nWHERE node.lft BETWEEN parent.lft AND parent.rgt\n AND node.category_id = product.category_id\nGROUP BY parent.name\nORDER BY node.lft;\n\n+----------------------+---------------------+\n| name | COUNT(product.name) |\n+----------------------+---------------------+\n| ELECTRONICS | 10 |\n| TELEVISIONS | 5 |\n| TUBE | 2 |\n| LCD | 1 |\n| PLASMA | 2 |\n| PORTABLE ELECTRONICS | 5 |\n| MP3 PLAYERS | 2 |\n| FLASH | 1 |\n| CD PLAYERS | 2 |\n| 2 WAY RADIOS | 1 |\n+----------------------+---------------------+\n")),Object(r.b)("h3",{id:"\uc0c8-\ub178\ub4dc-\ucd94\uac00"},"\uc0c8 \ub178\ub4dc \ucd94\uac00"),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"TELEVISIONS\uc640 PORTABLE ELECTRONICS \ub178\ub4dc \uc0ac\uc774\uc5d0 \uc0c8 \ub178\ub4dc\ub97c \ucd94\uac00"),Object(r.b)("li",{parentName:"ul"},"\uc0c8 \ub178\ub4dc\uc758 lft rgt \ub294 10, 11 \uc774\uace0 \uc624\ub978\ucabd\uc758 \ubaa8\ub4e0 \ub178\ub4dc\uc758 lft, rgt \uac12\uc774 2\uc529 \uc99d\uac00\ud55c\ub2e4. ")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"LOCK TABLE nested_category WRITE;\n\nSELECT @myRight := rgt FROM nested_category\nWHERE name = 'TELEVISIONS';\n\nUPDATE nested_category SET rgt = rgt + 2 WHERE rgt > @myRight;\nUPDATE nested_category SET lft = lft + 2 WHERE lft > @myRight;\n\nINSERT INTO nested_category(name, lft, rgt) VALUES('GAME CONSOLES', @myRight + 1, @myRight + 2);\n\nUNLOCK TABLES;\n")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"SELECT CONCAT( REPEAT( ' ', (COUNT(parent.name) - 1) ), node.name) AS name\nFROM nested_category AS node,\n nested_category AS parent\nWHERE node.lft BETWEEN parent.lft AND parent.rgt\nGROUP BY node.name\nORDER BY node.lft;\n\n+-----------------------+\n| name |\n+-----------------------+\n| ELECTRONICS |\n| TELEVISIONS |\n| TUBE |\n| LCD |\n| PLASMA |\n| GAME CONSOLES |\n| PORTABLE ELECTRONICS |\n| MP3 PLAYERS |\n| FLASH |\n| CD PLAYERS |\n| 2 WAY RADIOS |\n+-----------------------+\n")),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"\uae30\uc874 \uc790\uc2dd\uc774 \uc5c6\ub294 \ub178\ub4dc\uc758 \uc790\uc2dd\uc73c\ub85c \ub178\ub4dc\ub97c \ucd94\uac00\ud558\ub294 \uc808\ucc28")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"LOCK TABLE nested_category WRITE;\n\nSELECT @myLeft := lft FROM nested_category\n\nWHERE name = '2 WAY RADIOS';\n\nUPDATE nested_category SET rgt = rgt + 2 WHERE rgt > @myLeft;\nUPDATE nested_category SET lft = lft + 2 WHERE lft > @myLeft;\n\nINSERT INTO nested_category(name, lft, rgt) VALUES('FRS', @myLeft + 1, @myLeft + 2);\n\nUNLOCK TABLES;\n")),Object(r.b)("ul",null,Object(r.b)("li",{parentName:"ul"},"\ubd80\ubaa8 \ub178\ub4dc\ub294 \uc0ad\uc81c\ud558\uc9c0\ub9cc \uc790\uc2dd\uc740 \uc0ad\uc81c\ud558\uc9c0 \uc54a\ub294\uac83. \ud558\uc704 \ub178\ub4dc\ub294 \ubaa8\ub450 \uc0ad\uc81c\ub41c \uc0c1\uc704 \ub808\ubca8\ub85c \uc774\ub3d9")),Object(r.b)("pre",null,Object(r.b)("code",{parentName:"pre",className:"language-shell",metastring:"script",script:!0},"LOCK TABLE nested_category WRITE;\n\nSELECT @myLeft := lft, @myRight := rgt, @myWidth := rgt - lft + 1\nFROM nested_category\nWHERE name = 'PORTABLE ELECTRONICS';\n\nDELETE FROM nested_category WHERE lft = @myLeft;\n\nUPDATE nested_category SET rgt = rgt - 1, lft = lft - 1 WHERE lft BETWEEN @myLeft AND @myRight;\nUPDATE nested_category SET rgt = rgt - 2 WHERE rgt > @myRight;\nUPDATE nested_category SET lft = lft - 2 WHERE lft > @myRight;\n\nUNLOCK TABLES;\n")))}O.isMDXComponent=!0}}]);