私はusers
という表を持っています。それはtracks
のテーブルであり、その下にはlikes
というテーブルがあります。 users
テーブルのユーザーIDはid
列、テーブルのトラックIDはid
列、トラックを所有するユーザーIDの列はuser_ID
列です。 likes
テーブルには、トラックが好きなユーザーの場合はuser_id
、トラックIDの場合はtrack_id
の列があります。現在、私のクエリは完璧に動作していますが、特定のトラックIDが持つ好き嫌いの数をカウントしたいと思います。postgresクエリへのCOUNTの統合
私の現在のフェッチ要求:それはPostgresのに来るとき
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
を行う必要があることを知っていますが、現在のクエリにどのように統合するのか分かりません。下記のアランSametsの答えで遊ん
、私はこれで来ることができました:
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])
これはほぼ完璧に働いているが、ユーザーが自分の曲を気に入ったとき、それは正しく返しません。ユーザーが別のユーザーのトラックを好きになった時点で、好きな日付が返されますが、ユーザーが所有者のトラックを好きなときにはNone
の返信が間違っています。
*好きなリストとその数を同じクエリで取得することはできません。 (技術的には可能ですが、結果として得られるデータセットは意味をなさないでしょう) – zerkms
@zerkmsしたがって、2つのクエリに分割する必要がありますか? – Brosef
うん、そうだと思います。 – zerkms