私のウェブサイトには2つのテーブルがあります。users
テーブルとuser_friendships
テーブルはそれぞれ次のように構造化されています...
ユーザー
id | user_id | credits_bank | credits_offered
ユーザーの友情
id | user_id | user_followed_id
ユーザーがログインすると、Web サイト上の他のユーザーのリストが表示されます。他のユーザーのリストは、テーブルに格納されており、テーブルの値よりもテーブルusers
の値が大きいユーザーです。credits_bank
credits_offered
フレンドシップが作成されると、セッション ユーザーid
がuser_friendships
テーブルに保存され、彼がフォローした他のメンバーの ID もuser_friendships
テーブルの列の下に保存されますuser_followed_id
。
credits_bank
問題は、移動したすべてのユーザーと、セッション ユーザーと同じレコードcredits_offered
のテーブルにまだ存在しないユーザーを返すクエリが必要になったことです。user_frienships
私は現在使用しています...
SELECT DISTINCT u.*
FROM users u
LEFT JOIN user_friendships uf ON u.user_id = uf.user_followed_id
WHERE u.user_id <> ?
AND u.credits_offered <= credits_bank
AND uf.user_followed_id IS NULL
アップデート
credits_bank
より大きい値のユーザーのリストを表示したいのですが、セッション ユーザーと同じ行のテーブルcredits_offered
のレコードにまだ存在しない場合にのみ表示したいと考えています。user_friendships
ユーザー
id | user_id | credits_bank | credits_offered
___________________________________________________
1 123 10 2
2 231 6 3
3 312 6 5
4 213 2 1
ユーザーの友情
id | user_id | user_followed_id
___________________________________________________
1 123 231
2 123 312
結果
セッション user_id = 123 の場合...
user_id 231 and 312 WOULDN'T show as they are in the user friendships table alongside session user id
user_id 213 WOULD show as they have more credits_bank than credits_offered and arent in friendships table
セッション user_id が 312 の場合、user_friendships テーブルの誰とも友達ではないため、すべての結果が表示されます...