Помощь с запросом SQL для одной таблицы (комментарии) - PullRequest
0 голосов
/ 04 июня 2010

Пожалуйста, смотрите скриншот:

screenshot

Цель:

  • ID хотел бы иметь комментарии, вложенные 1 уровень глубоко
  • Комментарии будут расположены так, чтобы рейтинг родителя был в порядке убывания
  • рейтинг детских комментариев не имеет значения

В левой части скриншота показан вывод, который мне понравился. RHS показывает данные таблицы. Все комментарии хранятся в 1 таблице.

Я новичок в SQL-запросах. Лучшее, что я могу сделать:

SELECT * 
FROM [Comments] 
WHERE ([ArticleId] = @ArticleId) ORDER BY [ThreadId] DESC, [DateMade] 

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

Ответы [ 2 ]

1 голос
/ 04 июня 2010
SELECT c.* 
FROM Comments AS c
JOIN Comments AS tr ON tr.threadID = c.threadID 
 AND tr.ArticleId = c.ArticleId AND tr.isParent = 1
WHERE (c.ArticleId = @ArticleId) 
ORDER BY tr.Rating DESC, c.ThreadId DESC, c.DateMade 

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

Вам не нужно использовать сортировку int на c.isParent DESC до даты, потому что это самый старый комментарий в ветке.

0 голосов
/ 04 июня 2010

Я бы подумал, что что-то вроде этого может приблизиться.

ВЫБЕРИТЕ ребенка. * ОТ Комментарии родителя, Комментарии ребенка WHERE parent.id = child.parent_id ORDER BY parent.rating DESC, DateMade DESC

Это даст странные результаты, если рейтинг 2 потоков будет одинаковым, так что вам придется как-то заказывать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...