如果这是一个愚蠢或简单的问题我很抱歉,我已经尝试过搜索它,但无法找到解决方案;我怀疑我根本不知道这种操作的名称。
我有一个带有“卡”表的MySQL数据库。
卡片的铸造成本可能包含0到5种颜色。我想更新cards表中的每个条目以包含5列,每列都是每种可能颜色的布尔值。所以我需要一个简短的算法来解析卡片中的颜色,然后相应地填充5个布尔颜色值。
我可以想象如何使用PHP脚本执行此操作,但我认为必须有一些方法可以使用纯MySQL。我错了,或者这个类型的脚本有名称吗?
答案 0 :(得分:2)
我理解您的问题意味着您的card
表目前有一个名为casting cost
的列,其中包含一组颜色,例如'red,green'
或'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