@@ -290,33 +290,31 @@ def self.skip_db?
290
290
end
291
291
292
292
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
304
306
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
307
309
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
318
317
AND di.period_type = :period_type
319
- AND di.solutions <> x.solutions
320
318
SQL
321
319
322
320
add_directory_column ( "solutions" , query :)
0 commit comments