我试图弄清楚是否有一种简单的方法可以根据第一个表的列值使用mysql动态加载第二个表
服务器(表1):
ID |游戏|标题
Servers_1(表2,选项1):
server_id(链接到servers.id)| game_version |球员|插件
Servers_2(表2,选项2):
server_id(链接到servers.id)| game_version |球员| mods | game_map
Servers_etc。 (表2,选项等)
试图找出如何做
之类的事情left_join servers_[servers.game] on servers.id = servers_[servers.game].server_id
因此它会获取servers.game的值并使用它来完成表名。如果这是不可能的,那么可能是一个案例陈述,例如:
Left_Join
if ( servers.game == 1 ) 'servers_1'
elseif ( servers.game == 2 ) 'servers_2'
elseif ( servers.game == 3 ) 'servers_3'
答案 0 :(得分:2)
一个选项是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
您可以使用CASE
,而不是使用COALESCE
,因为每个Id / Game应该是唯一的,只有1不会为NULL:
SELECT COALESCE(S1.game_version,S2.game_version,...) game_version
如果同一服务器ID无法在多个表中,那么您可以将AND S.Game ...从LEFT JOIN中删除,因为它不再需要。取决于您的独特钥匙。
或者,您可以使用动态SQL。