2017年5月17日 星期三

更新 mysql sets 欄位

Database 有一種 SETS 型態的欄位,在某些時候蠻有用的,不同於 ENUM 型態欄位是多選一,SETS則是可以多選。像是 `categories`="fashion,food,travel" 。何不第三正規化就好了?但因為會多兩個 table。對於 SETS 屬性,要純以 SQL 來操作新增或移除是蠻麻煩的,在此筆記一下。


新增

UPDATE TABLE
SET
`categories` = TRIM(LEADING ',' FROM CONCAT_WS(',',`categories`,'{$category}') ) 
WHERE
...


移除

UPDATE TABLE
SET
TRIM(BOTH ',' FROM REPLACE(CONCAT(',', categories, ','), ',{$category},', ','))
WHERE
FIND_IN_SET('{$category}', categories)