Changes between Version 7 and Version 8 of AdvancedReports


Ignore:
Timestamp:
09/26/25 19:41:50 (3 weeks ago)
Author:
225144
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • AdvancedReports

    v7 v8  
    3737}}}
    3838
    39 == Приказ на сите topics или прокети кои ги задоволовуаат дадените критериуми
     39== Генерално филтрирање на сите topics или проекти
    4040
    4141{{{
     
    4747                    AND (CAST(:tags as varchar) IS NULL OR t.tags @> string_to_array(lower(:tags),',')::varchar[])
    4848}}}
     49
     50== Приказ на сите дискусии во рамки на даден topic, подредени според формула за популарност
     51
     52{{{
     53WITH RECURSIVE tree AS (
     54    SELECT
     55        t.id,
     56        content,
     57        created_at,
     58        t.is_created_by,
     59        0::numeric as "level",
     60        -1  as "parent"
     61    FROM topic_thread tt
     62    join thread t
     63    on t.id = tt.id
     64    where t.id = :topicId
     65
     66    UNION ALL
     67
     68    SELECT child.id,
     69           child.content,
     70           child.created_at,
     71           child.is_created_by,
     72           parent.level+1 as level,
     73           dt.contained_in as parent
     74    FROM thread child
     75    join discussion_thread dt
     76    on child.id = dt.id
     77    JOIN tree parent
     78    ON dt.contained_in = parent.id
     79),
     80thread_data as (SELECT tc.id as "id",
     81                       tc.content as "content",
     82                       tc.created_at as "created_at",
     83                       tc.level as "level",
     84                       tc.parent as "parent_id",
     85                       u.id as userId,
     86                       u.username,
     87                       (SELECT COUNT(*)
     88                        FROM tree row
     89                        WHERE
     90                            tc.id =
     91                            row.parent) AS numReplies,
     92                       (SELECT COALESCE(
     93                                       array_agg(l.user_id),
     94                                       '{}')
     95                        FROM likes l
     96                        WHERE
     97                            l.thread_id =
     98                            tc.id)      AS likedByUserIds
     99                FROM tree tc
     100                         join users u
     101                              on u.id =
     102                                 tc.is_created_by)
     103SELECT
     104    id,
     105    content,
     106    created_at as createdAt,
     107    level,
     108    parent_id as parentId,
     109    userId,
     110    username,
     111    numReplies,
     112    likedByUserIds
     113FROM thread_data td
     114ORDER BY
     115    level,
     116    0.3 * numReplies + 0.7 * cardinality(likedByUserIds)
     117DESC ;
     118}}}
     119
     120* Прашаликот за секој discussion ги враќа user_id што поставиле like како низа, со цел да може потоа во апликацијата да се прикаже точно кој корисник поставил like.