Ответы пользователя по тегу PostgreSQL
  • Как сортировать древовидные комментарии по рейтингу рутового комментария?

    @IgorVol Автор вопроса
    Как вариант, можно создать поле root_rating и хранить там либо рейтинг главного комментария ветки, либо сумму рейтинга комментариев в ветке. Тогда сортировка будет простая
    order by comments.root_rating desc, comments.rgt desc

    Но при каждом голосовании придется перезаписывать поле root_rating всей ветки.
    Очень не хочется так делать, может кто-то предложит более правильный способ.

    ПРАВИЛЬНОЕ РЕШЕНИЕ

    Правильный способ - использовать with recursive. Пример успешного запроса:
    WITH RECURSIVE r AS (
        SELECT id, text, depth, lft, rgt AS _rgt, cached_votes_score AS rating
            FROM comments AS c1
            WHERE depth = 0
    
        UNION ALL 
        
        SELECT c2.id, c2.text, c2.depth, c2.lft, c2.rgt, rating AS rating
            FROM comments c2
            JOIN r ON c2.parent_id = r.id
    )
    SELECT * FROM r ORDER BY rating desc, _rgt DESC;
    Ответ написан
    Комментировать