1

1)私はする必要があります:「ゲームIDが2より大きいプレーヤー「55」の同じゲームをプレイするすべてのプレーヤーを見つける」

テーブルは次の図のとおりです。

ここに画像の説明を入力

多くのステートメントを試しましたが、間違った結果が得られました:

SELECT Games.id, Players.id from Games, Players 
WHERE Players.id='55' and Games.id > 2;

2)さらに、「ゲームのIDは降順で最後の2つだけです」(つまり、この場合はIDが3と4のゲームのみですが、それは可能です他の場合は異なります)。Games.id をユーザー入力の数値と比較することしか考えられませんが、別の方法を知っている人もいるかもしれません...

誰か助けてくれませんか?ありがとうございました!

編集

1)SELECT b.id_player, b.id_game FROM Players a, Players b WHERE a.id_player = '55' AND b.id_game = a.id_game AND b.id_player <> '55' AND a.id_game > 2;

2) オプション 1 は質問 1 で機能しますが、質問 2 では TOP 句が必要であり、私には機能しません。

LIMIT または TOP を使用して同じことを達成するにはどうすればよいa.id_game > 2ですか? 最後の 2 つの ID_GAME の結果のみが必要です。この場合は id=3 と id=4 です...

編集: 気にしないでください。最初の質問があります。LIMIT を固定数に設定します。助けてくれてありがとう

4

3 に答える 3

1

これは間違いなく機能します。

SELECT a.* FROM Players a 
INNER JOIN (SELECT id,id_player,id_game 
            FROM players 
            WHERE id_game > 2 AND id_player = 55
           ) b 
ON a.id_game = b.id_game
WHERE a.id_player != 55;
于 2013-02-06T19:50:07.963 に答える
1

自己結合が必要です。私も今これをテストすることはできません.SQLフィドルをすぐに実行しますが、次のようにする必要があります。

SELECT b.id_player, b.id_game 
FROM Players a, 
     Players b 
WHERE a.id_player = '55' 
AND   b.id_game   = a.id_game 
AND   b.id_player <> '55' 
AND   a.id_game > 2
order by b.id_game
limit 2;
于 2013-02-06T18:57:04.530 に答える
1
SELECT Players.* 
FROM 
(SELECT id_game 
    FROM Players 
    WHERE id_player = 55 
    ORDER BY id_game DESC 
    LIMIT 2) 
AS A JOIN Players ON Players.id_game = A.id_game 
WHERE id_player <> 55

編集。サブクエリの LIMIT は mysql ではまだ実装されていません (元の投稿)。mysql 自体による提案の代替案は、今回テストされたこのようなクエリを使用することです。

于 2013-02-06T18:32:22.537 に答える