Skip to content

Commit 65a3f60

Browse files
committed
no ex join
1 parent 9a9f5d6 commit 65a3f60

File tree

1 file changed

+22
-24
lines changed

1 file changed

+22
-24
lines changed

plugin.rb

Lines changed: 22 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -290,33 +290,31 @@ def self.skip_db?
290290
end
291291

292292
query = <<~SQL
293-
WITH x AS (
294-
SELECT users.id AS user_id,
295-
COUNT(DISTINCT st.topic_id) FILTER (WHERE
296-
st.topic_id IS NOT NULL AND
297-
t.id IS NOT NULL AND
298-
t.archetype <> 'private_message' AND
299-
t.deleted_at IS NULL AND
300-
p.deleted_at IS NULL
301-
) AS solutions
302-
FROM users
303-
LEFT JOIN posts p ON p.user_id = users.id
293+
UPDATE directory_items di
294+
SET solutions = COALESCE(s.solutions, 0)
295+
FROM (
296+
SELECT
297+
u.id AS user_id,
298+
COUNT(DISTINCT st.id) FILTER (
299+
WHERE st.id IS NOT NULL
300+
AND t.id IS NOT NULL
301+
AND t.archetype <> 'private_message'
302+
AND t.deleted_at IS NULL
303+
) AS solutions
304+
FROM users u
305+
LEFT JOIN posts p ON p.user_id = u.id AND p.deleted_at IS NULL
304306
LEFT JOIN discourse_solved_solved_topics st
305-
ON st.answer_post_id = p.id
306-
AND st.created_at >= :since
307+
ON st.answer_post_id = p.id
308+
AND st.created_at > :since
307309
LEFT JOIN topics t ON t.id = st.topic_id
308-
WHERE users.id > 0
309-
AND users.active
310-
AND users.silenced_till IS NULL
311-
AND users.suspended_till IS NULL
312-
GROUP BY users.id
313-
)
314-
UPDATE directory_items di
315-
SET solutions = x.solutions
316-
FROM x
317-
WHERE x.user_id = di.user_id
310+
WHERE u.id > 0
311+
AND u.active
312+
AND u.silenced_till IS NULL
313+
AND u.suspended_till IS NULL
314+
GROUP BY u.id
315+
) s
316+
WHERE s.user_id = di.user_id
318317
AND di.period_type = :period_type
319-
AND di.solutions <> x.solutions
320318
SQL
321319

322320
add_directory_column("solutions", query:)

0 commit comments

Comments
 (0)