首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何设计分号,以便持有多米诺牌?

如何设计分号,以便持有多米诺牌?
EN

Stack Overflow用户
提问于 2014-05-18 18:38:24
回答 1查看 121关注 0票数 2

我想储存一些关于纸牌游戏Dominion的信息。你不需要对这个游戏了解太多,除了:

  • 大约有200张独特的卡片
  • 每张牌只包括十张,有时是十一张。

我会跟踪更多关于每个游戏(谁玩,谁赢,等等),但我有麻烦的是与“供应”(包括这游戏的十张卡片)。

我想要三张桌子,比如card_namesupplygame

代码语言:javascript
复制
 card_name            supply                        game                                      

 id | name        supply | card     game | supply | player1 | player2 | ... 
----+---------   --------+------   ------+--------+---------+---------+-----
  1 | Village          1 | 1         301 |      1 |  'Mike' |  'Tina' | ... 
  2 | Moat             1 | 3      
  3 | Witch            1 | 200    
... | ...            ... | ...    
200 | Armory      

我认为这是一个合理的方式来代表“迈克和蒂娜玩了一个游戏,其中包含了村庄,女巫,军械库,和一些其他卡片,我没有费心在这个例子中输入”。考虑到这个结构(或者其他一些,如果你认为我的结构不好的话),我想运行这样的查询:“哪个游戏有女巫和村庄,但没有护城河?”也就是说,我想指定一些任意数量的“包括这些X卡,排除这些Y卡”,并在game表中搜索符合条件的游戏。

我认为这是一个典型的一对多的关系,一个供应有多张卡片,但我不明白用多张卡寻找供应的正确方法。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-18 18:50:09

你的数据结构是合理的。我可能建议您也需要一个game_users表,这样用户就不会在单独的列中列出。如果游戏有不同的用户数量,这将是特别重要的。然而,这方面与你的问题无关。

您希望解决“集内集”子查询。您的结构很有用,supply表提供了所需的基本信息。

因此,查询“女巫”、“村庄”而不是“护城河”的适当“供应”记录如下:

代码语言:javascript
复制
select supplyid
from supplies s join
     cards c
     on s.cardid = c.cardid
group by supplyid
having sum(case when cardname = 'Witch' then 1 else 0 end) > 0 and
       sum(case when cardname = 'Village' then 1 else 0 end) > 0 and
       sum(case when cardname = 'Moat' then 1 else 0 end) = 0;

首先请注意,我更改了名称,因此id列包含单词"id“,表名为复数。

having子句中的每个条件表示卡片上的一个条件。您可以通过加入games来调整它以获取游戏信息。

代码语言:javascript
复制
select g.gameid
from supplies s join
     cards c
     on s.cardid = c.cardid join
     games g
     on g.supplyid = s.gameid
group by g.gameid
having sum(case when cardname = 'Witch' then 1 else 0 end) > 0 and
       sum(case when cardname = 'Village' then 1 else 0 end) > 0 and
       sum(case when cardname = 'Moat' then 1 else 0 end) = 0;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23725513

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档