1

私は3つのテーブルを持っています

user
id | etc |

game
id | etc 

user_game
user_id | game_id

私は、nユーザー同士で既にゲームを持っている場合に限り、ユーザーが別のゲームを作成できない状況を作りたいと考えていnます。

たとえば、私たちが持ってuser_ids: 1,2いて、両方とも で遊んでいると仮定するとgame_id 1、彼らの間で別のゲームを作成することはできませんuser_id 3が、ゲームに参加する場合は新しいゲームを作成できます。

もしそうなら、そのようなことを照会することは可能ですか - どうすればそれについて行くことができますか? クエリ、結合、選択、そして場所が長すぎて遊んでみました:)

編集: 最終結果は、深刻なユーザーを照会し、一緒にプレイする資格があるかどうかを確認することです (つまり、一緒にプレイしているnユーザーの記録は見つかりませんでした)。

4

1 に答える 1

0

提案されたユーザーのリストを含むテーブルがあると仮定します。これをProposedUsersと呼びます。次の手順を実行して、これらのユーザーがいるgame_idを見つけることができます。

select game_id
from user_game ug join
     ProposedUsers pu
     on ug.user_id = pu.user_id
group by game_id
having count(distinct ug.user_id) = (select count(distinct user_id) from ProposedUsers)

あなたの質問は、既存のゲームとの一致が正確であるかどうか(ゲームに他のユーザーがいないかどうか)について少し不明確です。上記はサブセットの場合を処理します。完全に一致するものは次のとおりです。

select game_id
from user_game ug left outer join
     ProposedUsers pu
     on ug.user_id = pu.user_id
group by game_id
having count(distinct ug.user_id) = (select count(distinct user_id) from ProposedUsers)
于 2012-10-24T18:48:09.363 に答える