나는 users
이라는 테이블을 가지고 있으며 그 아래에 tracks
테이블과 그 아래에 likes
테이블이 있습니다. users
테이블에는 사용자 ID에 대해 id
열이 있으며 tracks
테이블에는 트랙 ID에 대해 id
열과 트랙을 소유 한 사용자 ID에 대해 user_ID
열이 있습니다. likes
테이블에는 트랙을 좋아하는 사용자의 경우 user_id
열과 트랙 ID의 경우 track_id
열이 있습니다. 지금 내 쿼리가 완벽하게 작동하지만 특정 트랙 ID에 대한 좋아요 수를 계산하고 싶습니다.포스트그레스 쿼리에 COUNT 통합하기
나의 현재 인출 요청 :이 포스트 그레스에 관해서
cur.execute('SELECT t.title, t.share, t.id, u.id, u.username, l.date_liked, '
'FROM (tracks t INNER JOIN users u ON t.user_id = u.id)'
'LEFT JOIN (SELECT * FROM likes WHERE user_id = %s)'
'l ON l.track_id = t.id ORDER BY t.id DESC', [current_user.id])
나는 슈퍼에 정통한 아니에요. 나는 SELECT COUNT(track_id) FROM likes
을 할 필요가 있다는 것을 알고 있지만, 현재의 쿼리에 그것을 통합하는 방법을 잘 모르겠습니다. 이 거의 완벽하게 작동한다
cur.execute('WITH t_count AS'
'(SELECT tracks.id,'
'COUNT(*) like_count '
'FROM tracks '
'INNER JOIN likes '
'ON tracks.id = likes.track_id '
'GROUP BY tracks.id)'
', t_mylike AS'
'(SELECT likes.track_id, likes.date_liked FROM likes WHERE likes.user_id = %s)'
'SELECT t.title, t.share, t.id, t_count.like_count, u.id, u.username, ml.date_liked '
'FROM tracks t '
'LEFT JOIN t_count '
'ON t.id = t_count.id '
'INNER JOIN users u '
'ON u.id = t.user_id '
'LEFT JOIN t_mylike ml ON t.id = ml.track_id '
'ORDER BY t.id DESC', [current_user.id])
하지만, 사용자가 자신의 트랙을 좋아하는 경우 올바르게 반환하지 않습니다 아래 앨런 Samets 대답으로 주위 재생
는, 나는이 함께 할 수 있었다. 현재 사용자가 다른 사용자 트랙을 좋아할 때 좋아하는 날짜를 반환하지만 사용자가 소유자 트랙을 좋아할 때 None
을 반환하는 것은 잘못된 것입니다.
같은 쿼리에서 좋아하는 사람과 그 사람의 수를 모두 얻을 수는 없습니다. (기술적으로 가능하지만 결과 데이터 집합은 의미가 없습니다.) – zerkms
@zerkms 그래서 두 개의 쿼리로 나누어야합니까? – Brosef
네, 그렇게 생각합니다. – zerkms