{"id":2115,"date":"2023-01-04T11:44:12","date_gmt":"2023-01-04T04:44:12","guid":{"rendered":"https:\/\/mailike.xyz\/blog\/?p=2115"},"modified":"2024-10-31T13:51:41","modified_gmt":"2024-10-31T06:51:41","slug":"tree-datastructure","status":"publish","type":"post","link":"https:\/\/mailike.xyz\/blog\/tree-datastructure\/","title":{"rendered":"Tree Datastructure"},"content":{"rendered":"<ul dir=\"auto\" data-sourcepos=\"3:1-16:0\">\n<li data-sourcepos=\"3:1-7:0\">\n<p data-sourcepos=\"3:3-3:102\">D\u1eef li\u1ec7u d\u1ea1ng c\u00e2y l\u00e0 d\u1ea1ng d\u1eef li\u1ec7u th\u01b0\u1eddng \u0111\u01b0\u1ee3c th\u1ea5y \u1edf c\u00e1c \u1ee9ng d\u1ee5ng nh\u01b0:<\/p>\n<ul data-sourcepos=\"4:5-7:0\">\n<li data-sourcepos=\"4:5-4:78\">c\u1ea5u tr\u00fac s\u01a1 \u0111\u1ed3 ph\u00f2ng ban, b\u1ed9 ph\u1eadn c\u1ee7a m\u1ed9t doanh nghi\u1ec7p<\/li>\n<li data-sourcepos=\"5:5-5:35\">danh s\u00e1ch c\u00e1c chuy\u00ean m\u1ee5c<\/li>\n<li data-sourcepos=\"6:5-7:0\">b\u00ecnh lu\u1eadn theo d\u1ea1ng thread-based (vd: fb, tiktok, &#8230;)<\/li>\n<\/ul>\n<\/li>\n<li data-sourcepos=\"8:1-9:0\">\n<p data-sourcepos=\"8:3-8:288\">\u0110i\u1ec3m chung c\u1ee7a c\u1ea5u tr\u00fac d\u1ea1ng c\u00e2y l\u00e0 m\u1ed7i node tr\u00ean c\u00e2y th\u01b0\u1eddng c\u00f3 m\u1ed9t node cha v\u00e0 c\u00f3 t\u1eeb 0-n node con, c\u00e1c node con c\u0169ng c\u00f3 th\u1ec3 c\u00f3 r\u1ea5t nhi\u1ec1u c\u00e1c node con kh\u00e1c tu\u1ef3 v\u00e0o \u0111\u1ed9 s\u00e2u c\u1ee7a c\u00e2y. C\u00e1c node ban \u0111\u1ea7u (root node) th\u00ec kh\u00f4ng c\u00f3 node cha.<\/p>\n<\/li>\n<li data-sourcepos=\"10:1-16:0\">\n<p data-sourcepos=\"10:3-10:30\">C\u00e1c kh\u00e1i ni\u1ec7m c\u01a1 b\u1ea3n:<\/p>\n<ul data-sourcepos=\"11:5-16:0\">\n<li data-sourcepos=\"11:5-11:88\">N\u00fat g\u1ed1c : L\u00e0 n\u00fat tr\u00ean c\u00f9ng c\u1ee7a c\u00e2y, n\u00fat duy nh\u1ea5t kh\u00f4ng c\u00f3 n\u00fat cha.<\/li>\n<li data-sourcepos=\"12:5-12:46\">N\u00fat l\u00e1 : L\u00e0 c\u00e1c n\u00fat c\u00f3 0 n\u00fat con.<\/li>\n<li data-sourcepos=\"13:5-13:65\">N\u00fat nh\u00e1nh : L\u00e0 c\u00e1c n\u00fat c\u00f3 c\u1ea3 n\u00fat cha v\u00e0 n\u00fat con.<\/li>\n<li data-sourcepos=\"14:5-14:199\">M\u1ee9c c\u1ee7a n\u00fat : L\u00e0 c\u00e1c s\u1ed1 nguy\u00ean \u0111\u1ebfm t\u1eeb 0. C\u00e1c n\u00fat ngang h\u00e0ng c\u00f3 c\u00f9ng m\u1ee9c v\u1edbi nhau. N\u00fat g\u1ed1c c\u00f3 m\u1ee9c l\u00e0 0, c\u00e1c n\u00fat con tr\u1ef1c ti\u1ebfp c\u1ee7a g\u1ed1c c\u00f3 m\u1ee9c l\u00e0 1 &#8230;<\/li>\n<li data-sourcepos=\"15:5-16:0\">Chi\u1ec1u cao c\u1ee7a c\u00e2y : L\u00e0 m\u1ee9c c\u1ee7a n\u00fat l\u00e0 l\u1edbn nh\u1ea5t.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<ul dir=\"auto\" data-sourcepos=\"18:1-114:7\">\n<li data-sourcepos=\"17:1-17:16\">Ph\u1ed5 bi\u1ebfn:<\/li>\n<li data-sourcepos=\"18:1-61:0\">\n<p data-sourcepos=\"18:3-18:35\">Adjacency List (Danh s\u00e1ch k\u1ec1):<\/p>\n<ul data-sourcepos=\"19:5-20:283\">\n<li data-sourcepos=\"19:5-19:368\">vd v\u1edbi t\u00ednh n\u0103ng comments facebook theo d\u1ea1ng thread-based (ng\u01b0\u1eddi d\u00f9ng c\u00f3 th\u1ec3 tr\u1ea3 l\u1eddi l\u1eabn nhau v\u00f4 h\u1ea1n), t\u1ee9c l\u00e0 m\u1ed7i b\u00ecnh lu\u1eadn c\u00f3 th\u1ec3 \u0111\u01b0\u1ee3c tr\u1ea3 l\u1eddi b\u1edfi nhi\u1ec1u b\u00ecnh lu\u1eadn kh\u00e1c, t\u1ea1o ra nhi\u1ec1u c\u00e1c ph\u00e2n l\u1edbp kh\u00e1c nhau. M\u1ed7i b\u00ecnh lu\u1eadn (ngo\u1ea1i tr\u1eeb b\u00ecnh lu\u1eadn g\u1ed1c) s\u1ebd c\u00f3 duy nh\u1ea5t m\u1ed9t b\u00ecnh lu\u1eadn cha.<\/li>\n<li data-sourcepos=\"20:5-20:283\">theo c\u00e1ch Adjacency List, v\u1edbi m\u1ed7i b\u1ea3n ghi c\u1ee7a m\u1ed9t b\u00ecnh lu\u1eadn s\u1ebd l\u01b0u th\u00eam m\u1ed9t tr\u01b0\u1eddng parent_id \u0111\u1ec3 tr\u1ecf \u0111\u1ebfn b\u00ecnh lu\u1eadn cha c\u1ee7a b\u00ecnh lu\u1eadn hi\u1ec7n t\u1ea1i. N\u1ebfu b\u00ecnh lu\u1eadn \u0111\u00e3 l\u00e0 b\u00ecnh lu\u1eadn g\u1ed1c th\u00ec parent_id s\u1ebd \u0111\u01b0\u1ee3c \u0111\u1eb7t l\u00e0 null.<\/li>\n<\/ul>\n<div class=\"gl-relative markdown-code-block js-markdown-code\">\n<pre id=\"code-2\" class=\"code highlight js-syntax-highlight language-plaintext white\" lang=\"plaintext\" data-canonical-lang=\"\" data-sourcepos=\"21:5-29:7\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">CREATE TABLE comments (<\/span>\r\n<span id=\"LC2\" class=\"line\" lang=\"plaintext\">    comment_id primary key,<\/span>\r\n<span id=\"LC3\" class=\"line\" lang=\"plaintext\">    parent_id bigint unsigned,<\/span>\r\n<span id=\"LC4\" class=\"line\" lang=\"plaintext\">    comment_date datetime not null,<\/span>\r\n<span id=\"LC5\" class=\"line\" lang=\"plaintext\">    comment text not null,<\/span>\r\n<span id=\"LC6\" class=\"line\" lang=\"plaintext\">    foreign key (parent_id) references comments(comment_id)<\/span>\r\n<span id=\"LC7\" class=\"line\" lang=\"plaintext\">);<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<ul data-sourcepos=\"30:5-30:93\">\n<li data-sourcepos=\"30:5-30:93\">v\u1edbi adjacency list \u0111\u1ec3 query node cha ho\u1eb7c node con tr\u1ef1c ti\u1ebfp kh\u00e1 d\u1ec5 d\u00e0ng<\/li>\n<\/ul>\n<div class=\"gl-relative markdown-code-block js-markdown-code\">\n<pre id=\"code-3\" class=\"code highlight js-syntax-highlight language-plaintext white\" lang=\"plaintext\" data-canonical-lang=\"\" data-sourcepos=\"31:5-35:7\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">select c1.*, c2.*<\/span>\r\n<span id=\"LC2\" class=\"line\" lang=\"plaintext\">from comments c1 left join comments c2<\/span>\r\n<span id=\"LC3\" class=\"line\" lang=\"plaintext\">on c2.parent_id = c1.comment_id;<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<ul data-sourcepos=\"36:5-36:103\">\n<li data-sourcepos=\"36:5-36:103\">Tuy nhi\u00ean \u0111\u1ec3 query l\u1ea5y h\u1ebft m\u1ecdi con ch\u00e1u c\u1ee7a m\u1ed9t node cha kh\u00f4ng h\u1ec1 \u0111\u01a1n gi\u1ea3n.<\/li>\n<\/ul>\n<div class=\"gl-relative markdown-code-block js-markdown-code\">\n<pre id=\"code-4\" class=\"code highlight js-syntax-highlight language-plaintext white\" lang=\"plaintext\" data-canonical-lang=\"\" data-sourcepos=\"37:5-58:7\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">WITH RECURSIVE menu_tree<\/span>\r\n<span id=\"LC2\" class=\"line\" lang=\"plaintext\">    (id, parent_id, level)<\/span>\r\n<span id=\"LC3\" class=\"line\" lang=\"plaintext\">AS (<\/span>\r\n<span id=\"LC4\" class=\"line\" lang=\"plaintext\">SELECT<\/span>\r\n<span id=\"LC5\" class=\"line\" lang=\"plaintext\">    comment_id,<\/span>\r\n<span id=\"LC6\" class=\"line\" lang=\"plaintext\">    parent_id,<\/span>\r\n<span id=\"LC7\" class=\"line\" lang=\"plaintext\">    0<\/span>\r\n<span id=\"LC8\" class=\"line\" lang=\"plaintext\">FROM comments<\/span>\r\n<span id=\"LC9\" class=\"line\" lang=\"plaintext\">WHERE parent_id is null<\/span>\r\n<span id=\"LC10\" class=\"line\" lang=\"plaintext\"><\/span>\r\n<span id=\"LC11\" class=\"line\" lang=\"plaintext\">UNION ALL<\/span>\r\n<span id=\"LC12\" class=\"line\" lang=\"plaintext\">SELECT<\/span>\r\n<span id=\"LC13\" class=\"line\" lang=\"plaintext\">    mn.comment_id,<\/span>\r\n<span id=\"LC14\" class=\"line\" lang=\"plaintext\">    mn.parent_id,<\/span>\r\n<span id=\"LC15\" class=\"line\" lang=\"plaintext\">    mt.level + 1<\/span>\r\n<span id=\"LC16\" class=\"line\" lang=\"plaintext\">FROM comments mn, menu_tree mt<\/span>\r\n<span id=\"LC17\" class=\"line\" lang=\"plaintext\">WHERE mn.parent_id = mt.comment_id<\/span>\r\n<span id=\"LC18\" class=\"line\" lang=\"plaintext\">)<\/span>\r\n<span id=\"LC19\" class=\"line\" lang=\"plaintext\">SELECT * FROM menu_tree<\/span>\r\n<span id=\"LC20\" class=\"line\" lang=\"plaintext\">ORDER BY level, parent_id, comment_id;<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<ul data-sourcepos=\"59:5-61:0\">\n<li data-sourcepos=\"59:5-59:280\">\u0110\u1ec3 lo\u1ea1i b\u1ecf m\u1ed9t node b\u1ea5t k\u1ef3 ra kh\u1ecfi tree, b\u1eb1ng c\u00e1ch th\u1ef1c hi\u1ec7n query nh\u01b0 b\u1ea3ng tr\u00ean v\u00e0 thay <code>parent_id is null<\/code> th\u00e0nh gi\u00e1 tr\u1ecb mu\u1ed1n lo\u1ea1i b\u1ecf \u0111\u1ec3 l\u1ea5y h\u1ebft con ch\u00e1u c\u1ee7a node \u0111\u00f3. Ho\u1eb7c c\u00f3 th\u1ec3 s\u1eed d\u1ee5ng \u0111\u1ec7 quy \u0111\u1ec3 v\u00e9t c\u1ea1n.<\/li>\n<li data-sourcepos=\"60:5-61:0\">\u0110\u1ec3 th\u00eam m\u1ed9t node v\u00e0o v\u1ecb tr\u00ed b\u1ea5t k\u1ef3 ch\u1ec9 c\u1ea7n x\u00e1c \u0111\u1ecbnh node cha.<\/li>\n<\/ul>\n<\/li>\n<li data-sourcepos=\"62:1-114:7\">\n<p data-sourcepos=\"62:3-62:16\">Closure Table:<\/p>\n<ul data-sourcepos=\"63:5-64:198\">\n<li data-sourcepos=\"63:5-63:313\">closure table l\u00e0 c\u00e1ch th\u00eam m\u1ed9t b\u1ea3ng ph\u1ee5 l\u00e0m b\u1ea3ng tham chi\u1ebfu m\u1ed1i quan h\u1ec7 ancestor-descendant. \u0110i\u1ec3m m\u1ea5u ch\u1ed1t l\u00e0 m\u1ed1i quan h\u1ec7 ancestor-descendant s\u1ebd l\u01b0u l\u1ea1i m\u1ecdi quan h\u1ec7 (cha-cha, cha-con, cha-ch\u00e1u, &#8230;) ch\u1ee9 kh\u00f4ng ch\u1ec9 l\u01b0u m\u1ed7i m\u1ed1i quan h\u1ec7 cha-con tr\u1ef1c ti\u1ebfp.<\/li>\n<li data-sourcepos=\"64:5-64:198\">B\u00ean c\u1ea1nh b\u1ea3ng <code>comments<\/code>, v\u1edbi c\u00e1ch n\u00e0y ch\u1ec9 c\u1ea7n t\u1ea1o th\u00eam m\u1ed9t b\u1ea3ng ph\u1ee5 TreePaths v\u1edbi c\u00e1c tr\u01b0\u1eddng ancestor-descendant v\u00e0 l\u01b0u l\u1ea1i \u1edf \u0111\u00f3 c\u00e1c quan c\u1eb7p quan h\u1ec7.<\/li>\n<\/ul>\n<div class=\"gl-relative markdown-code-block js-markdown-code\">\n<pre id=\"code-5\" class=\"code highlight js-syntax-highlight language-plaintext white\" lang=\"plaintext\" data-canonical-lang=\"\" data-sourcepos=\"65:5-79:7\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">CREATE TABLE comments (<\/span>\r\n<span id=\"LC2\" class=\"line\" lang=\"plaintext\">    comment_id primary key,<\/span>\r\n<span id=\"LC3\" class=\"line\" lang=\"plaintext\">    comment_date datetime not null,<\/span>\r\n<span id=\"LC4\" class=\"line\" lang=\"plaintext\">    comment text not null<\/span>\r\n<span id=\"LC5\" class=\"line\" lang=\"plaintext\">);<\/span>\r\n<span id=\"LC6\" class=\"line\" lang=\"plaintext\"><\/span>\r\n<span id=\"LC7\" class=\"line\" lang=\"plaintext\">CREATE TABLE TreePaths (<\/span>\r\n<span id=\"LC8\" class=\"line\" lang=\"plaintext\">    ancestor bigint unsigned not null, <\/span>\r\n<span id=\"LC9\" class=\"line\" lang=\"plaintext\">    descendant bigint unsigned not null,<\/span>\r\n<span id=\"LC10\" class=\"line\" lang=\"plaintext\">    primary key(ancestor, descendant),<\/span>\r\n<span id=\"LC11\" class=\"line\" lang=\"plaintext\">    foreign key (ancestor) references comments(comment_id),<\/span>\r\n<span id=\"LC12\" class=\"line\" lang=\"plaintext\">    foreign key (descendant) references comments(comment_id)<\/span>\r\n<span id=\"LC13\" class=\"line\" lang=\"plaintext\">);<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<ul data-sourcepos=\"80:5-81:55\">\n<li data-sourcepos=\"80:5-80:427\">T\u01b0\u01a1ng \u1ee9ng v\u1edbi m\u1ed7i node, th\u00ec \u1edf b\u1ea3ng TreePaths s\u1ebd c\u00f3 m\u1ed9t b\u1ea3n ghi ch\u1ec9 m\u1ed1i quan h\u1ec7 l\u00ean ch\u00ednh node hi\u1ec7n t\u1ea1i, v\u00e0 nhi\u1ec1u b\u1ea3n ghi ch\u1ec9 m\u1ed1i quan h\u1ec7 \u0111\u1ebfn m\u1ecdi descendant c\u1ee7a node hi\u1ec7n t\u1ea1i \u0111\u00f3. Nh\u1edd \u0111\u00f3 m\u00e0 vi\u1ec7c truy v\u1ea5n query node cha, node con tr\u1ef1c ti\u1ebfp s\u1ebd d\u1ec5 d\u00e0ng h\u01a1n. Ngay c\u1ea3 query l\u1ea5y h\u1ebft m\u1ecdi con ch\u00e1u c\u0169ng \u0111\u01a1n gi\u1ea3n h\u01a1n <code>Adjacency List<\/code> nhi\u1ec1u.<\/li>\n<li data-sourcepos=\"81:5-81:55\">vd \u0111\u1ec3 t\u00ecm c\u00e1c ancestor c\u1ee7a comment_id = 6:<\/li>\n<\/ul>\n<div class=\"gl-relative markdown-code-block js-markdown-code\">\n<pre id=\"code-6\" class=\"code highlight js-syntax-highlight language-plaintext white\" lang=\"plaintext\" data-canonical-lang=\"\" data-sourcepos=\"82:5-87:7\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">select c.*<\/span>\r\n<span id=\"LC2\" class=\"line\" lang=\"plaintext\">from comments as c<\/span>\r\n<span id=\"LC3\" class=\"line\" lang=\"plaintext\">join TreePaths as t on c.comment_id = t.ancestor<\/span>\r\n<span id=\"LC4\" class=\"line\" lang=\"plaintext\">where t.descendant = 6;<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<ul data-sourcepos=\"88:5-88:57\">\n<li data-sourcepos=\"88:5-88:57\">vd \u0111\u1ec3 t\u00ecm c\u00e1c descendant c\u1ee7a comment_id = 4;<\/li>\n<\/ul>\n<div class=\"gl-relative markdown-code-block js-markdown-code\">\n<pre id=\"code-7\" class=\"code highlight js-syntax-highlight language-plaintext white\" lang=\"plaintext\" data-canonical-lang=\"\" data-sourcepos=\"89:5-94:7\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">select c.*<\/span>\r\n<span id=\"LC2\" class=\"line\" lang=\"plaintext\">from comments as c<\/span>\r\n<span id=\"LC3\" class=\"line\" lang=\"plaintext\">join TreePaths as t on c.comment_id = t.descendant<\/span>\r\n<span id=\"LC4\" class=\"line\" lang=\"plaintext\">where t.ancestor = 4;<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<ul data-sourcepos=\"95:5-96:221\">\n<li data-sourcepos=\"95:5-95:267\">Vi\u1ec7c th\u00eam c\u00e1c node c\u0169ng d\u1ec5 d\u00e0ng h\u01a1n. Ch\u1ec9 c\u00f3 m\u1ed9t \u0111i\u1ec1u ph\u1ea3i l\u01b0u \u00fd l\u00e0 khi d\u1eef li\u1ec7u c\u00e2y nhi\u1ec1u v\u00e0 s\u00e2u h\u01a1n th\u00ec s\u1ed1 l\u01b0\u1ee3ng b\u1ea3n ghi c\u1ee7a TreePath c\u0169ng t\u0103ng l\u00ean r\u1ea5t nhanh, \u0111\u00e1nh \u0111\u1ed5i l\u1ea1i vi\u1ec7c truy xu\u1ea5t d\u1ec5 d\u00e0ng h\u01a1n.<\/li>\n<li data-sourcepos=\"96:5-96:221\">\u0110\u1ec3 lo\u1ea1i b\u1ecf m\u1ed9t node b\u1ea5t k\u1ef3 ra kh\u1ecfi tree, b\u1eb1ng c\u00e1ch th\u1ef1c hi\u1ec7n query nh\u01b0 b\u1ea3ng tr\u00ean v\u00e0 thay <code>c1.ancestor = 1<\/code> th\u00e0nh gi\u00e1 tr\u1ecb mu\u1ed1n lo\u1ea1i b\u1ecf \u0111\u1ec3 l\u1ea5y h\u1ebft con ch\u00e1u c\u1ee7a node \u0111\u00f3.<\/li>\n<\/ul>\n<div class=\"gl-relative markdown-code-block js-markdown-code\">\n<pre id=\"code-8\" class=\"code highlight js-syntax-highlight language-plaintext white\" lang=\"plaintext\" data-canonical-lang=\"\" data-sourcepos=\"97:5-102:7\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">select c1.descendant, c2.descendant<\/span>\r\n<span id=\"LC2\" class=\"line\" lang=\"plaintext\">from tree_datastructure.TreePaths c1 left join tree_datastructure.TreePaths c2<\/span>\r\n<span id=\"LC3\" class=\"line\" lang=\"plaintext\">on c2.ancestor = c1.descendant <\/span>\r\n<span id=\"LC4\" class=\"line\" lang=\"plaintext\">where c1.ancestor = 1<\/span><\/code><\/pre>\n<p>&nbsp;<\/p>\n<\/div>\n<p data-sourcepos=\"103:5-103:77\">Ho\u1eb7c \u0111\u1ec3 lo\u1ea1i b\u1ecf t\u1ea5t c\u1ea3 row li\u00ean quan \u0111\u1ebfn node c\u1ea7n xo\u00e1<\/p>\n<div class=\"gl-relative markdown-code-block js-markdown-code\">\n<pre id=\"code-9\" class=\"code highlight js-syntax-highlight language-plaintext white\" lang=\"plaintext\" data-canonical-lang=\"\" data-sourcepos=\"104:5-114:7\"><code><span id=\"LC1\" class=\"line\" lang=\"plaintext\">select *<\/span>\r\n<span id=\"LC2\" class=\"line\" lang=\"plaintext\">from tree_datastructure.TreePaths where `descendant = 4` and descendant != ancestor<\/span>\r\n<span id=\"LC3\" class=\"line\" lang=\"plaintext\">UNION ALL<\/span>\r\n<span id=\"LC4\" class=\"line\" lang=\"plaintext\"><\/span>\r\n<span id=\"LC5\" class=\"line\" lang=\"plaintext\">select c2.*<\/span>\r\n<span id=\"LC6\" class=\"line\" lang=\"plaintext\">from tree_datastructure.TreePaths c1 left join tree_datastructure.TreePaths c2<\/span>\r\n<span id=\"LC7\" class=\"line\" lang=\"plaintext\">on c2.ancestor = c1.descendant <\/span>\r\n<span id=\"LC8\" class=\"line\" lang=\"plaintext\">where `c1.ancestor = 4`<\/span>\r\n<span id=\"LC9\" class=\"line\" lang=\"plaintext\">order by ancestor, descendant<\/span><\/code><\/pre>\n<p>Slide tham kh\u1ea3o: Tree Datastructure<\/p>\n<\/div>\n<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>D\u1eef li\u1ec7u d\u1ea1ng c\u00e2y l\u00e0 d\u1ea1ng d\u1eef li\u1ec7u th\u01b0\u1eddng \u0111\u01b0\u1ee3c th\u1ea5y \u1edf c\u00e1c \u1ee9ng d\u1ee5ng nh\u01b0: c\u1ea5u tr\u00fac s\u01a1 \u0111\u1ed3 ph\u00f2ng ban, b\u1ed9 ph\u1eadn c\u1ee7a m\u1ed9t doanh nghi\u1ec7p danh s\u00e1ch c\u00e1c chuy\u00ean m\u1ee5c b\u00ecnh lu\u1eadn theo d\u1ea1ng thread-based (vd: fb, tiktok, &#8230;) \u0110i\u1ec3m chung c\u1ee7a c\u1ea5u tr\u00fac d\u1ea1ng c\u00e2y l\u00e0 m\u1ed7i node tr\u00ean c\u00e2y th\u01b0\u1eddng [&#8230;]\n","protected":false},"author":1,"featured_media":2118,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-2115","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-posts"],"_links":{"self":[{"href":"https:\/\/mailike.xyz\/blog\/wp-json\/wp\/v2\/posts\/2115","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/mailike.xyz\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/mailike.xyz\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/mailike.xyz\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/mailike.xyz\/blog\/wp-json\/wp\/v2\/comments?post=2115"}],"version-history":[{"count":5,"href":"https:\/\/mailike.xyz\/blog\/wp-json\/wp\/v2\/posts\/2115\/revisions"}],"predecessor-version":[{"id":5238,"href":"https:\/\/mailike.xyz\/blog\/wp-json\/wp\/v2\/posts\/2115\/revisions\/5238"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/mailike.xyz\/blog\/wp-json\/wp\/v2\/media\/2118"}],"wp:attachment":[{"href":"https:\/\/mailike.xyz\/blog\/wp-json\/wp\/v2\/media?parent=2115"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/mailike.xyz\/blog\/wp-json\/wp\/v2\/categories?post=2115"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/mailike.xyz\/blog\/wp-json\/wp\/v2\/tags?post=2115"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}