0

如果这是一个愚蠢或简单的问题,我深表歉意,我已经尝试搜索它,但无法找到解决方案;我怀疑我根本不知道这种手术的名称。

我有一个带有“卡片”表的 MySQL 数据库。

卡牌有施法成本,可能包含 0 到 5 种颜色。我想更新卡片表中的每个条目以包含 5 列,每列都是每种可能颜色的布尔值。所以我需要一个简短的算法来解析卡片中的颜色,然后相应地填充 5 个布尔颜色值。

我可以想象如何使用 PHP 脚本来做到这一点,但我认为必须有某种方法可以使用纯 MySQL 来做到这一点。我弄错了吗,或者这种类型的脚本有名字吗?

4

1 回答 1

2

我理解您的问题意味着您的card表当前有一个名为的列casting cost,其中包含一组颜色,例如'red,green'or'blue,orange,yellow'并且您正在寻找一个查询,该查询产生布尔列,指示每种可能的颜色是否在casting cost?

如果是这样,MySQL的FIND_IN_SET()功能应该给你你所追求的:

SELECT *,
       FIND_IN_SET('red',    `casting cost`) > 0 AS red,
       FIND_IN_SET('blue',   `casting cost`) > 0 AS blue,
       FIND_IN_SET('green',  `casting cost`) > 0 AS green,
       FIND_IN_SET('orange', `casting cost`) > 0 AS orange,
       FIND_IN_SET('yellow', `casting cost`) > 0 AS yellow
FROM   card

如果要永久更改表以包含此类列:

ALTER TABLE card
  ADD COLUMN red    BOOLEAN NOT NULL DEFAULT FALSE,
  ADD COLUMN blue   BOOLEAN NOT NULL DEFAULT FALSE,
  ADD COLUMN green  BOOLEAN NOT NULL DEFAULT FALSE,
  ADD COLUMN orange BOOLEAN NOT NULL DEFAULT FALSE,
  ADD COLUMN yellow BOOLEAN NOT NULL DEFAULT FALSE

UPDATE card SET
  red    = FIND_IN_SET('red',    `casting cost`) > 0,
  blue   = FIND_IN_SET('blue',   `casting cost`) > 0,
  green  = FIND_IN_SET('green',  `casting cost`) > 0,
  orange = FIND_IN_SET('orange', `casting cost`) > 0,
  yellow = FIND_IN_SET('yellow', `casting cost`) > 0
于 2012-05-29T18:12:12.833 回答