0

SQL 初心者。gamesinvitations、およびの3 つのテーブルがあります。users

このクエリは、進行中のゲームを返します。

SELECT games.* 
FROM   games 
       INNER JOIN invitations 
               ON invitations.game_id = games.id 
                  AND invitations.user_id = 1 
                  AND invitations.status = 1 
                  AND games.status = 1; 

このクエリは、終了したゲームを返します。

SELECT games.* 
FROM   games 
       INNER JOIN invitations 
               ON invitations.game_id = games.id 
                  AND invitations.user_id = 1 
                  AND invitations.status = 1 
                  AND games.status = 2; 

このクエリは、ユーザーがまだ参加するかどうかを決定していないゲームを返します。

SELECT games.* 
FROM   games 
       INNER JOIN invitations 
               ON invitations.game_id = games.id 
                  AND invitations.user_id = 1 
                  AND invitations.status = 0;

これらの 3 つのクエリからの結果を必要とする Web アプリがある場合、3 つの SQL ステートメントを実行する必要がありますか、またはそれらを 1 つに圧縮する方法はありますか? 3つのリクエストを行うのは私には多すぎるように思えます.これはこれに対処する通常の方法ですか?

4

2 に答える 2

1

次のように要約できます。

SELECT games.*, 
       CASE WHEN invitations.status = 1 THEN games.status 
            ELSE invitations.status 
       END status 
FROM   games 
   INNER JOIN invitations 
   ON invitations.game_id = games.id 
      AND invitations.user_id = 1 
      AND ((invitations.status = 1 AND games.status IN (1,2))
         OR (invitations.status = 0))

返さstatusれた列を使用して、どの行がどれであるかを判断できます。

于 2013-04-10T02:54:35.007 に答える