Каков наилучший способ ограничить запрос отсортированными результатами в таблице Closure с полем глубины в MySQL?

Исследование устойчивости иерархических данных и привело меня к закрытию таблиц и составило эту структуру комментариев, основанную на кульминации указанного исследования.

Запросы для создания новых узлов в таблице замыкания были достаточно просты для меня, чтобы понять и извлечь данные для потомков через JOIN на столе закрытия достаточно просто.

Тем не менее, я хотел бы остановиться на этом и получить результаты обратно отсортированы и ограничены по количеству родителей / детей на глубину х.

Я пытаюсь сделать вещи своевременными / эффективными (я ожидаю, что таблица комментариев станет очень большой), используя внешние ключи и индексы. Я стреляю по запросу "все в одном", который может выполнить то, что я спрашиваю в заголовке, но я не против разбить его, чтобы повысить скорость / эффективность.

Текущие структуры таблицы:

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 Можно ли сделать все это одним запросом? Я не совсем уверен, с чего начать.

0 ответов

Другие вопросы по тегам