0

私のウェブサイトには2つのテーブルがあります。usersテーブルとuser_friendshipsテーブルはそれぞれ次のように構造化されています...

ユーザー

id  |  user_id  |  credits_bank  |  credits_offered

ユーザーの友情

id  |  user_id  |  user_followed_id

ユーザーがログインすると、Web サイト上の他のユーザーのリストが表示されます。他のユーザーのリストは、テーブルに格納されており、テーブルの値よりもテーブルusersの値が大きいユーザーです。credits_bankcredits_offered

フレンドシップが作成されると、セッション ユーザーiduser_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 テーブルの誰とも友達ではないため、すべての結果が表示されます...

4

2 に答える 2

1

私が知る限り、あなたは近くにいます。現在のユーザーのユーザー ID が SESS_USER_ID と呼ばれる場合、次のようなものが機能するはずです。

SELECT DISTINCT u.*
FROM users u
LEFT JOIN user_friendships uf 
   ON uf.user_followed_id = u.user_id 
  AND uf.user_id = SESS_USER_ID
WHERE u.credits_offered <= credits_bank
  AND uf.user_followed_id IS NULL
  AND u.user_id <> SESS_USER_ID

(簡単にするために、クエリで SESS_USER_ID が 2 回使用されていることに注意してください)

でテストする SQLfiddle

于 2013-06-01T16:14:27.127 に答える