Skip to content

Commit 98b7329

Browse files
committed
update recommender to take interest overlap into consideration
1 parent 5cd9499 commit 98b7329

File tree

1 file changed

+16
-21
lines changed

1 file changed

+16
-21
lines changed

server/prisma/sql/recommend.sql

Lines changed: 16 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,28 @@
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
914

1015
AND NOT EXISTS (
1116
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)
1318
AND (status = 'MATCHED' OR status = 'REJECTED')
1419
)
1520

1621
AND NOT EXISTS (
1722
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
1924
AND status = 'PENDING'
2025
)
2126

22-
ORDER BY overlap DESC
27+
ORDER BY course_overlap + interest_overlap DESC
2328
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

Comments
 (0)