2012-03-04 37 views
0

我有新的問題查詢:MySQL的 - 切排第一串視病情

我想這取決於ID一些新的數據更新列「列」:

UPDATE table SET column = CASE 
    WHEN id = 2 THEN CONCAT(`column`, ',7') 
    WHEN id = 3 THEN CONCAT(`column`, ',10')  
    ELSE column 
    END; 

可惜的是,加列的新值必須以逗號開頭,因爲列將數據存儲爲逗號分隔值。 例如,它看起來是這樣的:

id | column 
------------- 
2 | 3, 1, 20 
3 | 1, 5 

執行查詢後,我得到:

id | column 
------------- 
2 | 3, 1, 20, 7 
3 | 1, 5, 10 

這一切都很好至今。可惜的是,如果我更新欄是空的,這一切以逗號開始,它看起來像這樣:

id | column 
------------- 
2 | ,7 
3 | ,10 

它從數據庫監守當我爆炸(),它使得第一陣列值空掠數據時,會導致一些問題。我想在更新表格時刪除這樣的第一個逗號。 我想我應該作出這樣的檢查「列」(與CHAR_LENGTH)的長度有一定的「如果」語句,如果它是空的更新而不先開始逗號。 你能幫助我正確的語法?

摘要: 如何使如上值與逗號開始,如果「列」存在描述了更新列適當的查詢。如果'列'爲空,則用變量更新它,而不用逗號開始。

回答

1

如何:

UPDATE table SET column = CASE 
    WHEN id = 2 THEN CONCAT(`column`, IF(CHAR_LENGTH(column)=0, '', ','), '7') 
    WHEN id = 3 THEN CONCAT(`column`, IF(CHAR_LENGTH(column)=0, '', ','), '10')  
    ELSE column 
    END; 

MySQL的參考手冊:CHAR_LENGTH(..)IF(..,..,..)

+0

的偉大工程,謝謝。 – Kalreg 2012-03-04 22:48:05

+0

不客氣!快樂的編碼! – SteAp 2012-03-04 23:10:30

2

正確的方法是不使用CSV的列中,使用一個單獨的關聯表。然後,只需在關聯表中插入或刪除行,就不會有任何問題。

但是,如果您必須使用當前架構堅持,那麼你可以這樣做:

update table 
set column = case 
    when id = 2 then concat(column, if(coalesce(column, '') = '', '7', ',7')) 
    when id = 3 then concat(column, if(coalesce(column, '') = '', '10', ',10')) 
    end 
where id in (2, 3) 

如果不包括coalesce那麼你會在column與空值遇到問題。

另請注意,我放棄了else以支持WHERE子句,請不要更新超過您的需要。

+0

,謝謝,我嘗試管理它大約assosiation表。我按照你的建議放了別的東西 – Kalreg 2012-03-04 22:49:04