0

これがばかげた、または単純な質問である場合は申し訳ありません。検索を試みましたが、解決策が見つかりませんでした。この種の手術の名前を知らないだけだと思います。

「カード」テーブルを持つ MySQL データベースがあります。

カードにはキャスティング コストがあり、これには 0 ~ 5 色が含まれる場合があります。カード テーブルのすべてのエントリを更新して、5 つの列を含め、それぞれが可能な色ごとにブール値になるようにしたいと考えています。したがって、カード内の色を解析し、それに応じて 5 つのブール値の色値を入力する短いアルゴリズムが必要になります。

PHP スクリプトでこれを行う方法は想像できますが、純粋な MySQL で行うには何らかの方法があるに違いないと思いました。私は間違っていますか、またはこのタイプのスクリプトの名前はありますか?

4

1 に答える 1

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
于 2012-05-29T18:12:12.833 に答える