liquid_feedback_core

changeset 476:c463d280947c

Function "featured_initiative" simplified
author jbe
date Wed Mar 30 16:52:24 2016 +0200 (2016-03-30)
parents ecac8ab6ca04
children eff90049fcff
files core.sql
line diff
     1.1 --- a/core.sql	Wed Mar 30 11:46:52 2016 +0200
     1.2 +++ b/core.sql	Wed Mar 30 16:52:24 2016 +0200
     1.3 @@ -2440,8 +2440,8 @@
     1.4            ) AS "subquery"
     1.5            ORDER BY "seed"
     1.6          LOOP
     1.7 -          FOR "result_row" IN
     1.8 -            SELECT "initiative".* FROM "initiative"
     1.9 +          SELECT "initiative".* INTO "result_row"
    1.10 +            FROM "initiative"
    1.11              JOIN "issue" ON "issue"."id" = "initiative"."issue_id"
    1.12              JOIN "supporter" ON "supporter"."initiative_id" = "initiative"."id"
    1.13              LEFT JOIN "supporter" AS "self_support" ON
    1.14 @@ -2451,19 +2451,17 @@
    1.15              AND "issue"."area_id" = "area_id_p"
    1.16              AND "issue"."state" IN ('admission', 'discussion', 'verification')
    1.17              AND "self_support"."member_id" ISNULL
    1.18 +            AND NOT "initiative_id_ary" @> ARRAY["initiative"."id"]
    1.19              ORDER BY md5("seed_v" || '-' || "initiative"."id")
    1.20 -          LOOP
    1.21 -            IF NOT "initiative_id_ary" @> ARRAY["result_row"."id"] THEN
    1.22 -              "match_v" := TRUE;
    1.23 -              "initiative_id_ary" := "initiative_id_ary" || "result_row"."id";
    1.24 -              RETURN NEXT "result_row";
    1.25 -              IF array_length("initiative_id_ary", 1) >= "sample_size_v" THEN
    1.26 -                RETURN;
    1.27 -              ELSE
    1.28 -                EXIT;
    1.29 -              END IF;
    1.30 +            LIMIT 1;
    1.31 +          IF FOUND THEN
    1.32 +            "match_v" := TRUE;
    1.33 +            "initiative_id_ary" := "initiative_id_ary" || "result_row"."id";
    1.34 +            RETURN NEXT "result_row";
    1.35 +            IF array_length("initiative_id_ary", 1) >= "sample_size_v" THEN
    1.36 +              RETURN;
    1.37              END IF;
    1.38 -          END LOOP;
    1.39 +          END IF;
    1.40          END LOOP;
    1.41          EXIT WHEN NOT "match_v";
    1.42        END LOOP;

Impressum / About Us