我应该为此使用多个PostgreSQL查询吗?

时间:2016-07-21 04:35:09

标签: database postgresql

我有几张桌子。

表1(player_main)

此表有一个“id”列,它是UUID类型,是主键。

表2(game_main)

此表还有一个UUID类型的“id”列,并且是主键。

表3(game_members) 该表有一个UUID类型的“member_id”列,它是一个主键和一个对player_main(id)的外部引用。 还有一个UUID类型的“game_id”列,它引用了game_main(id)。

我的问题是,如果玩家连接到服务器,我希望能够通过查询数据库并接收所有数据来构建他们的数据对象来加载他们的“游戏数据”。我获得了存储在player_main(id)中的播放器的UUID。我需要获取game_main(id)以及与该game_main(id)对应的所有游戏成员id的列表。

我该怎么做?我尝试使用where子句进行不同类型的连接以识别game_members(member_id),但只返回与刚刚加入的成员相对应的行,而不是包含该游戏的所有成员的列。

感谢任何帮助,谢谢。

修改

我尝试了以下查询:

SELECT t1.member_id, t2.*
FROM game_members t1
INNER JOIN game_main t2
ON t1.game_id = t2.id
WHERE t1.member_id = <some UID>

导致1行和2列。列是“game_members.member_id”和“game_main.id”。第一列的值是我在where子句中指定的UUID,第二列的值是游戏的UUID。我期待看到2行数据具有相同的“game_main.id”但具有不同的“game_member.member_id”,因为我目前在同一游戏中有2个条目。

修改2

根据要求,我将提供表格的样本数据以及我希望看到的输出。

示例数据:

[player_main]

id                                  
------------------------------------|
863fdf91-86fb-49a7-9232-bcb596e3a86f|
7af64cd7-72a2-410f-9b5c-620127fca0ac|
c7b1952a-b263-470f-9cae-9d5e6d7a8186|

[game_main]

id
------------------------------------|
dd76c680-5853-40a6-b757-0457d1a7e95f|
ca4f5b1f-0f8c-4f10-969c-464ccf207d9c|

[game_members]

member_id                           | game_id       
------------------------------------|------------------------------------
863fdf91-86fb-49a7-9232-bcb596e3a86f|dd76c680-5853-40a6-b757-0457d1a7e95f
7af64cd7-72a2-410f-9b5c-620127fca0ac|dd76c680-5853-40a6-b757-0457d1a7e95f
c7b1952a-b263-470f-9cae-9d5e6d7a8186|ca4f5b1f-0f8c-4f10-969c-464ccf207d9c

[所需的输出]

这就是玩家当前游戏的游戏信息应该是什么样子。如果我的UUID等于863fdf91-86fb-49a7-9232-bcb596e3a86f

,查询应该只占用玩家的UUID并返回以下内容
member_id                           | game_id       
------------------------------------|------------------------------------
863fdf91-86fb-49a7-9232-bcb596e3a86f|dd76c680-5853-40a6-b757-0457d1a7e95f
7af64cd7-72a2-410f-9b5c-620127fca0ac|dd76c680-5853-40a6-b757-0457d1a7e95f

2 个答案:

答案 0 :(得分:0)

尝试对game_members表进行自联接。以下查询将生成所有与某个玩家使用的游戏有任何共同游戏的独特成员。

SELECT DISTINCT t2.member_id, t1.game_id
FROM game_members t1
INNER JOIN game_members t2
    ON t1.game_id = t2.game_id
WHERE t1.member_id = <some UID>

答案 1 :(得分:0)

您可以将问题分解为:

  • Sub FindandReplace() Dim sourceCol As Integer, rowCount As Integer, currentRow As Integer Dim currentRowValue As String sourceCol = 6 ' find last row in column F rowCount = Cells(Rows.Count, sourceCol).End(xlUp).Row 'for every row, find the first blank cell and select it For currentRow = 1 To rowCount currentRowValue = Cells(currentRow, sourceCol-1).Value If IsEmpty(currentRowValue) Or currentRowValue = "" Then Cells(currentRow, sourceCol-1) = "general" End If Next End Sub 然后
  • 中查找玩家当前的游戏
  • 从同一game_members
  • 中查找游戏的当前玩家

此方法转换为涉及自联接的以下查询:

game_members