|
1 | | -SELECT recv.id, |
2 | | - (SELECT COUNT(*) FROM "Enrollment" recv_enroll |
3 | | - INNER JOIN "Enrollment" req_enroll |
4 | | - ON recv_enroll."courseId" = req_enroll."courseId" |
5 | | - WHERE recv_enroll."userId" = recv.id |
6 | | - AND req_enroll."userId" = $1) |
7 | | -AS overlap FROM "User" recv |
8 | | -WHERE recv.id <> $1 |
| 1 | +SELECT |
| 2 | + $1 AS senderId, |
| 3 | + recv, |
| 4 | + (SELECT COUNT(1) FROM "Course" course |
| 5 | + WHERE EXISTS (SELECT 1 FROM "Enrollment" e WHERE e.userId = recv.id) |
| 6 | + AND EXISTS (SELECT 1 FROM "Enrollment" e WHERE e.userId = senderId) |
| 7 | + ) AS course_overlap, |
| 8 | + (SELECT COUNT(1) FROM "InterestSubject" subj |
| 9 | + WHERE EXISTS (SELECT 1 FROM "Interest" i WHERE i.userId = recv.id) |
| 10 | + AND EXISTS (SELECT 1 FROM "Interest" i WHERE i.userId = senderId) |
| 11 | + ) AS interest_overlap |
| 12 | +FROM "User" recv |
| 13 | +WHERE recv.id <> senderId |
9 | 14 |
|
10 | 15 | AND NOT EXISTS ( |
11 | 16 | SELECT 1 FROM "Relationship" rel |
12 | | - WHERE rel."sendingUserId" IN ($1, recv.id) AND rel."receivingUserId" IN ($1, recv.id) |
| 17 | + WHERE rel."sendingUserId" IN (senderId, recv.id) AND rel."receivingUserId" IN (senderId, recv.id) |
13 | 18 | AND (status = 'MATCHED' OR status = 'REJECTED') |
14 | 19 | ) |
15 | 20 |
|
16 | 21 | AND NOT EXISTS ( |
17 | 22 | SELECT 1 FROM "Relationship" rel_pd |
18 | | - WHERE rel_pd."sendingUserId" = $1 AND rel_pd."receivingUserId" = recv.id |
| 23 | + WHERE rel_pd."sendingUserId" = senderId AND rel_pd."receivingUserId" = recv.id |
19 | 24 | AND status = 'PENDING' |
20 | 25 | ) |
21 | 26 |
|
22 | | -ORDER BY overlap DESC |
| 27 | +ORDER BY course_overlap + interest_overlap DESC |
23 | 28 | LIMIT $2 OFFSET $3; |
24 | | - |
25 | | --- SELECT recv.id AS recv, COUNT(recv_enroll) AS overlap FROM "User" recv |
26 | | --- LEFT JOIN "Relationship" rel ON (rel."sendingUserId" = recv.id AND rel."receivingUserId" = $1) OR (rel."sendingUserId" = $1 AND rel."sendingUserId" = recv.id) |
27 | | --- LEFT JOIN "Enrollment" recv_enroll ON recv_enroll."userId" = recv.id |
28 | | --- INNER JOIN "Course" course ON recv_enroll."courseId" = course.id |
29 | | --- INNER JOIN "Enrollment" req_enroll ON req_enroll."courseId" = course.id |
30 | | --- WHERE req_enroll."userId" = $1 AND recv.id <> $1 |
31 | | --- AND rel.status != 'MATCHED' |
32 | | --- GROUP BY recv.id |
33 | | --- ORDER BY overlap DESC LIMIT $2 OFFSET $3; |
0 commit comments