3

mysqlを使用して最初のテーブルの列値に基づいて2番目のテーブルを動的にロードする簡単な方法があるかどうかを調べようとしています

サーバー(表1):

ID | ゲーム| タイトル

Servers_1(表2、オプション1):

server_id(servers.idへのリンク)| game_version | プレイヤー| プラグイン

Servers_2(表2、オプション2):

server_id(servers.idへのリンク)| game_version | プレイヤー| 改造| game_map

Servers_etc。(表2、オプションなど)

次のようなことを行う方法を理解しようとしています

left_join servers_[servers.game] on servers.id = servers_[servers.game].server_id

したがって、servers.gameの値を取得し、それを使用してテーブル名を完成させます。これが不可能な場合は、次のようなcaseステートメントが可能です。

 Left_Join
   if ( servers.game == 1 ) 'servers_1'
   elseif ( servers.game == 2 ) 'servers_2'
   elseif ( servers.game == 3 ) 'servers_3'
4

1 に答える 1

2

1つのオプションは、LEFT JOIN各テーブルに対して、CASEステートメントを使用して適切なデータを返すことです。

このようなものはあなたが始めるのに役立つはずです:

SELECT S.Id, S.Game, S.Title,
   CASE S.Game
      WHEN 1 THEN S1.game_version 
      WHEN 2 THEN S2.game_version 
   END game_version,
   ...
FROM Servers S
   LEFT JOIN Servers_1 S1 ON S.id = S1.Server_Id AND S.Game = 1
   LEFT JOIN Servers_2 S2 ON S.id = S2.Server_Id AND S.Game = 2

を使用する代わりに、各ID /ゲームは一意である必要があり、1つだけがNULLにならないため、CASEおそらく使用することができます。COALESCE

SELECT COALESCE(S1.game_version,S2.game_version,...) game_version

同じサーバーIDを複数のテーブルに含める方法がない場合は、AND S.Game...をLEFTJOINから除外することができます。これは、不要になるためです。一意のキーによって異なります。

または、動的SQLを使用することもできます。

于 2013-03-03T04:04:00.297 に答える