mwit
01/15/2022, 10:43 PMsql
SELECT
g.user_id,
(select curRank+1 into curRank) rank1
FROM
(
SELECT
p.user_id
FROM posts p
WHERE p.parent_uuid = input_uuid
OR p.uuid = input_uuid
GROUP BY p.user_id
) g
SELECT ... INTO is not allowed here
curRank is the issue here, any ideas 🤔 ?tourdownunder
01/15/2022, 10:49 PMcurRank
declared?mwit
01/15/2022, 10:49 PMsql
LEFT JOIN
(
SELECT
g.user_id,
(@curRank := @curRank + 1) rank1
FROM
(
SELECT
p.user_id
FROM posts p
WHERE p.parent_id = ${parent_id}
OR p.uuid = ${parent_id}
GROUP BY p.user_id
) g,
(SELECT @curRank := 0) r
) gg ON p.user_id = gg.user_id
mwit
01/15/2022, 10:49 PMdeclare curRank int := 0;
mwit
01/15/2022, 10:50 PMsql
DROP FUNCTION IF EXISTS get_post_children;
create function get_post_children(input_uuid text)
returns table (
rank1 bigint,
text text,
channel text,
uuid text,
parent_uuid text,
created_at timestamptz,
image_url text,
comment_count bigint,
vote_count bigint,
my_vote smallint
) as $$
declare curRank int := 0;
begin
return query select
gg.rank1,
p.text,
p.channel,
p.uuid,
p.parent_uuid,
p.created_at,
p.image_url,
p2.comment_count,
pv2.vote_count,
pv4.my_vote
from posts p
left join (
select p1.parent_uuid, count(p1.*) comment_count from posts p1 group by p1.parent_uuid
) p2 on p2.parent_uuid = p.uuid
left join (
select pv1.post_uuid, count(pv1.*) vote_count from post_votes pv1 where pv1.vote = 1 group by pv1.post_uuid
) pv2 on pv2.post_uuid = p.uuid
left join (
select pv3.post_uuid, pv3.vote my_vote from post_votes pv3 where pv3.user_id = auth.uid()
) pv4 on pv4.post_uuid = p.uuid
LEFT JOIN
(
SELECT
g.user_id,
curRank rank1,
(select curRank+1 into curRank)
FROM
(
SELECT
p.user_id
FROM posts p
WHERE p.parent_uuid = input_uuid
OR p.uuid = input_uuid
GROUP BY p.user_id
) g
) gg ON p.user_id = gg.user_id
WHERE
p.parent_uuid in (input_uuid)
order by p.id asc
;
end;
$$ language plpgsql;
select get_post_children('vVAZ1zYite2')
complete functiontourdownunder
01/15/2022, 10:53 PMtourdownunder
01/15/2022, 10:53 PMtourdownunder
01/15/2022, 10:54 PMmwit
01/15/2022, 10:54 PMmwit
01/15/2022, 10:55 PMtourdownunder
01/15/2022, 10:58 PMmwit
01/15/2022, 10:58 PMtourdownunder
01/15/2022, 11:01 PMtourdownunder
01/15/2022, 11:02 PMmwit
01/15/2022, 11:02 PMmwit
01/15/2022, 11:02 PMmwit
01/15/2022, 11:03 PMmwit
01/15/2022, 11:03 PMtourdownunder
01/15/2022, 11:11 PMmwit
01/15/2022, 11:20 PMsql
SELECT
g.user_id,
rank() over(partition by g.user_id order by g.id) rank1
FROM
(
SELECT
p.id,
p.user_id
FROM posts p
WHERE p.parent_uuid = 'vVAZ1zYite2'
OR p.uuid = 'vVAZ1zYite2'
) g
mwit
01/15/2022, 11:21 PMtourdownunder
01/15/2022, 11:30 PMrow_number()
instead.mwit
01/15/2022, 11:34 PMtourdownunder
01/15/2022, 11:37 PMg.user_id
isn't what you need in there.mwit
01/15/2022, 11:37 PMrow_number
tourdownunder
01/15/2022, 11:38 PMrank1
mwit
01/15/2022, 11:39 PMmwit
01/15/2022, 11:39 PMtourdownunder
01/15/2022, 11:39 PMmwit
01/15/2022, 11:39 PMmwit
01/15/2022, 11:40 PMmwit
01/15/2022, 11:41 PMtourdownunder
01/15/2022, 11:43 PMmwit
01/15/2022, 11:45 PMmwit
01/15/2022, 11:45 PMmwit
01/15/2022, 11:45 PMmwit
01/15/2022, 11:47 PMtourdownunder
01/15/2022, 11:51 PMsql
SELECT
g.user_id
FROM
(
SELECT
p.id,
p.user_id,
rank() over(partition by p.user_id order by p.id desc) rank1
FROM posts p
WHERE p.parent_uuid = 'vVAZ1zYite2'
OR p.uuid = 'vVAZ1zYite2'
) g
WHERE g.rank1 = 1 -- Only show the most recent post per user
mwit
01/15/2022, 11:52 PMmwit
01/15/2022, 11:52 PMmwit
01/15/2022, 11:53 PMtourdownunder
01/15/2022, 11:53 PMmwit
01/15/2022, 11:53 PMmwit
01/15/2022, 11:54 PMmwit
01/15/2022, 11:54 PMmwit
01/15/2022, 11:55 PM