2012-05-29 81 views
0

我很抱歉,如果這是一個愚蠢或簡單的問題,我已經試過尋找它,但無法找到解決方案;我懷疑我根本不知道這種手術的名字。MySQL - 將數據添加到數據庫的每個條目的命令?

我有一個「卡」表的MySQL數據庫。

牌具有鑄造成本,其中可能包含0到5種顏色。我想更新cards表中的每個條目以包含5列,每個列對於每種可能的顏色都是布爾值。所以我需要一個簡短的算法來解析卡片中的顏色,然後相應地填充5個布爾顏色值。

我可以想象如何用PHP腳本來做到這一點,但我認爲必須有某種方式來用純MySQL來做到這一點。我錯了,還是有這種類型的腳本的名稱?

+0

你能告訴我們一些你的數據看起來像什麼樣的例子,以及期望的輸出是什麼? – Daan

+0

我不清楚......我們需要更多的信息,你能更具體嗎? – jcho360

回答

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 
+0

我認爲這是正確的方向,謝謝!我應該更清楚「鑄造成本」 - 它的格式可能更像是「RGB」,它將是紅色,綠色和藍色。沒有逗號,所以它不適合。 – Bing

+1

@myingling:在這種情況下,您必須使用['LOCATE()'](http://dev.mysql.com/doc/en/string-functions.html#function_locate)。 ''LOCATE('R','鑄造成本')> 0'' – eggyal

+0

美麗,謝謝! – Bing

相關問題