研究分层数据持久性并引导我关闭表格并根据上述研究的高潮拼凑出这个评论结构。
在闭包表中创建新节点的查询很容易让我掌握并通过JOIN
闭包表上的 a 为后代获取数据也很简单。
但是,我想对此进行扩展,并通过 x 的深度对父母/孩子的数量进行排序和限制。
我试图通过使用外键和索引来保持事情的及时/高效(我希望评论表变得非常大)。我正在寻找一个可以做我在标题中要求的多合一查询,但不反对将其分解以提高速度/效率。
当前表结构:
CREATE TABLE `comments` (
`comment_id` int(11) UNSIGNED PRIMARY KEY,
`reply_to` int(11) UNSIGNED NOT NULL DEFAULT '0',
`user_id` int(11) UNSIGNED NOT NULL,
`comment_time` int(11) NOT NULL,
`comment` mediumtext NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES users(`user_id`)
) Engine=InnoDB
CREATE TABLE `comments_closure`(
`ancestor_id` int(11) UNSIGNED NOT NULL,
`descendant_id` int(11) UNSIGNED NOT NULL,
`length` tinyint(3) UNSIGNED NOT NULL DEFAULT '0',
PRIMARY KEY(`ancestor_id`, `descendant_id`),
KEY `tree_adl`(`ancestor_id`, `descendant_id`, `length`),
KEY `tree_dl`(`descendant_id`, `length`),
FOREIGN KEY (`ancestor_id`) REFERENCES comments(`comment_id`),
FOREIGN KEY (`descendant_id`) REFERENCES comments(`comment_id`)
) Engine=InnoDB
我想要做的更清晰的总结是获取 20 条共享 的评论ancestor_id
,按时间排序。同时还更深入地获取每个人的评论 2 length
(将这些评论限制在更小的数量 2)也按时间排序。
但是,我不希望总是按时间排序,并且还想获取按其排序的结果comment_id
是否可以在单个查询中完成所有这些操作?我不太确定从哪里开始。