liquid_feedback_core
diff core.sql @ 476:c463d280947c
Function "featured_initiative" simplified
author | jbe |
---|---|
date | Wed Mar 30 16:52:24 2016 +0200 (2016-03-30) |
parents | ecac8ab6ca04 |
children | eff90049fcff |
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;